Goeiemorgen! Ik ben bezig met een zoekfunctie, alleen is deze zodra er meerdere joins in zitten erg traag. Deze zoekfunctie is geschreven in PHP, en krijg bij het uitvoeren van de query ook een mysql time-out error. Ik gebruik MySQL 4.0.20a.
De structuur van de database is als het volgt
// deze tabel is gevuld met studentengegevens
tblStudenten
Id (Int, 7 karakters)
Naam (Varchar, 50 karakters)
Etc.
// koppeltabel om per student meerdere studie richtingen aan te geven
tblStudierichting
Id (Int, 11 karakters)
Waarde (Int, 11 karakters)
// koppeltabel om per student meerdere talen die die student beheerst aan te geven
tblTalen
Id (Int, 11 karakters)
Waarde (Int, 11 karakters)
De query waarbij ik meerdere JOINs leg ziet er zo uit:
Deze query is erg traag, zo traag dat ik bij de uitvoer ervan een time-out krijg. Ik heb al geprobeerd om de attributen die ik nodig heb direct aan te geven, ipv SELECT * FROM..., maar dit heeft geen resultaat. Het ORDER BY... weglaten heeft ook geen zin gehad. Ik heb tevens geprobeerd om de JOINs in het FROM component te leggen, dus:
... alleen scheelde dit geen tijd in het uitvoeren van de zoekopdracht. Ik heb ook geprobeerd om een LEFT, RIGHT, INNER LEFT, etc. JOIN te gebruiken, maar je raad het al... dit had ook geen resultaat
Ik heb op google, de search, en mysql.com doorgespit, maar ik loop vast.
Mijn vraag is dus: Wat kan ik eraan doen om deze query sneller te maken?
De structuur van de database is als het volgt
// deze tabel is gevuld met studentengegevens
tblStudenten
Id (Int, 7 karakters)
Naam (Varchar, 50 karakters)
Etc.
// koppeltabel om per student meerdere studie richtingen aan te geven
tblStudierichting
Id (Int, 11 karakters)
Waarde (Int, 11 karakters)
// koppeltabel om per student meerdere talen die die student beheerst aan te geven
tblTalen
Id (Int, 11 karakters)
Waarde (Int, 11 karakters)
De query waarbij ik meerdere JOINs leg ziet er zo uit:
code:
1
2
3
4
5
6
7
| SELECT * FROM tblStudenten m JOIN tblStudierichting s ON m.Id = s.Id JOIN tblTalen t ON m.Id = t.Id WHERE s.Waarde= 11 AND t.Waarde= 1 ORDER BY m.Id DESC LIMIT 0, 50 |
Deze query is erg traag, zo traag dat ik bij de uitvoer ervan een time-out krijg. Ik heb al geprobeerd om de attributen die ik nodig heb direct aan te geven, ipv SELECT * FROM..., maar dit heeft geen resultaat. Het ORDER BY... weglaten heeft ook geen zin gehad. Ik heb tevens geprobeerd om de JOINs in het FROM component te leggen, dus:
code:
1
2
3
| SELECT * FROM tblStudenten, tblStudierichting, tblTalen WHERE m.Id = t.Id AND m.Id = s.Id |
... alleen scheelde dit geen tijd in het uitvoeren van de zoekopdracht. Ik heb ook geprobeerd om een LEFT, RIGHT, INNER LEFT, etc. JOIN te gebruiken, maar je raad het al... dit had ook geen resultaat
Mijn vraag is dus: Wat kan ik eraan doen om deze query sneller te maken?
[ Voor 6% gewijzigd door bas.kb op 13-10-2004 11:47 ]