SQL Join
Ik heb twee tabellen, één met uitspraken, de ander met auteurs. Nu wil ik zoeken op een bepaalde tekst (wat auteur of uitspraak kan zijn). De tabellen heb ik gekoppeld met de volgende query:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
SELECT b.auteur,b.uitspraak,
MATCH(s.naam) AGAINST('zoekwoord') + MATCH(b.veld1,b.veld2,b.veld3,b.uitspraak) AGAINST('zoekwoord') AS score
FROM auteurs AS s
LEFT JOIN citaten AS b ON s.id = b.auteur
WHERE MATCH(s.naam) AGAINST('zoekwoord')
OR MATCH(b.veld1,b.veld2,b.veld3,b.uitspraak) AGAINST('zoekwoord')
ORDER BY score DESC
MATCH(s.naam) AGAINST('zoekwoord') + MATCH(b.veld1,b.veld2,b.veld3,b.uitspraak) AGAINST('zoekwoord') AS score
FROM auteurs AS s
LEFT JOIN citaten AS b ON s.id = b.auteur
WHERE MATCH(s.naam) AGAINST('zoekwoord')
OR MATCH(b.veld1,b.veld2,b.veld3,b.uitspraak) AGAINST('zoekwoord')
ORDER BY score DESC
Nu is deze query erg traag (zo'n minuut), dit komt mede doordat de citaten tabel meer dan 10.000 records bevat. Hoe kan ik deze query sneller maken met hetzelfde resultaat?
maar dan heb je weer niet het zelfde resultaat
Nee volgens mij is de query niet efficiënt
Oh, ik denk overigs dat er niet zoveel aan te doen is. Vanwege die match...
Ik gebruik nu twee keer (bijna) dezelfde match, misschien is dat te vereenvoudigen?
Even profiler gebruiken, dan kan je zien waar de query's bottleneck zit.
Status Tijd
starting 0.000032
checking query cache for query 0.000091
checking permissions 0.000010
checking permissions 0.000010
Opening tables 0.000026
System lock 0.000013
Table lock 0.000041
init 0.000043
optimizing 0.000019
statistics 0.000024
preparing 0.000022
FULLTEXT initialization 0.000066
Creating tmp table 0.000051
executing 0.000010
Copying to tmp table 78.009749
Sorting result 0.000076
Sending data 0.003781
end 0.000024
removing tmp table 0.000056
end 0.000011
end 0.000009
query end 0.000010
storing result in query cache 0.000030
freeing items 0.000023
closing tables 0.000016
logging slow query 0.000009
logging slow query 0.000008
cleaning up 0.000010
Gewijzigd op 01/01/1970 01:00:00 door steen
Zie hierboven voor de resultaten,,, Het verplaatsen naar een tijdelijke tabel duurt het langst, is daar wat aan te doen behalve een LIMIT toevoegen?
*bump* iemand een oplossing om 't sneller te maken? De Order By zorgt voor de tmp tabel
*bump*
*bump*
Probeer eens zonder die OR.
heb je al es explain gedaan ipv hier te lopen bumpen :p
1 SIMPLE s ALL NULL NULL NULL NULL 3660 Using temporary; Using filesort
1 SIMPLE b ALL NULL NULL NULL NULL 11166 Using where
leesvoer:
http://dev.mysql.com/doc/refman/5.1/en/using-explain.html
http://dev.mysql.com/doc/refman/5.1/en/query-speed.html
EXPLAIN EXTENDED geeft exact hetzelfde resultaat bij deze query
EXPLAIN EXTENDED geeft exact hetzelfde resultaat bij deze query
EXPLAIN EXTENDED geeft exact hetzelfde resultaat bij deze query
Gewijzigd op 01/01/1970 01:00:00 door John D