Nieuw lid |
|
Ik heb de volgende query gemaakt:
SELECT *
FROM
knhs_cpv_pe as pe
RIGHT JOIN
knhs_cpv_co as co
ON
co.persoonsnummer = pe.persoonsnummer
LEFT JOIN
knhs_cpv_di as di
ON
co.diernummer = di.diernummer
WHERE MATCH(pe.voorletters, pe.voornaam, pe.tussenvoegsels, pe.achternaam) AGAINST('Jansen')
GROUP BY co.combinatienummer
SELECT * FROM knhs_cpv_pe AS pe RIGHT JOIN knhs_cpv_co AS co ON co.persoonsnummer = pe.persoonsnummer LEFT JOIN knhs_cpv_di AS di ON co.diernummer = di.diernummer WHERE MATCH(pe.voorletters, pe.voornaam, pe.tussenvoegsels, pe.achternaam) AGAINST('Jansen') GROUP BY co.combinatienummer
Deze query neemt ruim de tijd, ergens rond de 2 seconden.
Als ik de volgende query uitvoer, gaat het veel sneller (0,118 sec):
SELECT *
FROM knhs_cpv_pe AS pe
RIGHT JOIN knhs_cpv_co AS co ON co.persoonsnummer = pe.persoonsnummer
LEFT JOIN knhs_cpv_di AS di ON co.diernummer = di.diernummer
WHERE pe.achternaam = 'Jansen'
GROUP BY co.combinatienummer
SELECT * FROM knhs_cpv_pe AS pe RIGHT JOIN knhs_cpv_co AS co ON co.persoonsnummer = pe.persoonsnummer LEFT JOIN knhs_cpv_di AS di ON co.diernummer = di.diernummer WHERE pe.achternaam = 'Jansen' GROUP BY co.combinatienummer
Het verschil is dus dat er hier geen gebruik wordt gemaakt van de FullText index. Het probleem zit daar echter ook niet.
Als ik de join weghaal, en dan de fulltext gebruik om te zoeken, wordt de query uitgevoerd in 0,0006 seconden. De query is dan:
SELECT *
FROM
knhs_cpv_pe as pe
WHERE MATCH(pe.voorletters, pe.voornaam, pe.tussenvoegsels, pe.achternaam) AGAINST('Adelaars')
SELECT * FROM knhs_cpv_pe AS pe WHERE MATCH(pe.voorletters, pe.voornaam, pe.tussenvoegsels, pe.achternaam) AGAINST('Adelaars')
Een explain van de eerste query staat op: http://i56.tinypic.com/ibg8j4.png
Wie weet waar dit aan zou kunnen liggen?
Edit: OPGELOST:
SELECT *
FROM
knhs_cpv_pe as pe
INNER JOIN
knhs_cpv_co as co
ON
co.persoonsnummer = pe.persoonsnummer AND (MATCH(pe.voorletters, pe.voornaam, pe.tussenvoegsels, pe.achternaam) AGAINST('Jansen') )
INNER JOIN
knhs_cpv_di as di
ON
co.diernummer = di.diernummer
SELECT * FROM knhs_cpv_pe AS pe INNER JOIN knhs_cpv_co AS co ON co.persoonsnummer = pe.persoonsnummer AND (MATCH(pe.voorletters, pe.voornaam, pe.tussenvoegsels, pe.achternaam) AGAINST('Jansen') ) INNER JOIN knhs_cpv_di AS di ON co.diernummer = di.diernummer
|