Tabel in kwestie heeft de volgende (relevante) velden:
- ID
- ParentID
- MasterID
Ik probeer een JOIN tot stand te brengen van een tabel opzichzelf waarbij de volgende condities zijn:
- als er een MasterID is, doe de JOIN dan tussen dat MasterID en de ID, zo niet dan gewoon tussen de ID en ID
Dit doe ik met de volgende code:
Dit werkt in princiepe prima, alleen is het rete-traag omdat ik het niet voor elkaar krijg MySQL duidelijk te maken dat het een index moet gebruiken. Zowel ID als MasterID zijn geïndexeerd, maar mysql vindt het toch nodig alle ca 30.000 records af te gaan (bleek uit een EXPLAIN)
iemand enig idee hoe ik dit zo kan herschrijven zodat mysql niet alle records af gaat maar alleen de relevante? (en dus gebruik maakt van de indexen die er op staan)
- ID
- ParentID
- MasterID
Ik probeer een JOIN tot stand te brengen van een tabel opzichzelf waarbij de volgende condities zijn:
- als er een MasterID is, doe de JOIN dan tussen dat MasterID en de ID, zo niet dan gewoon tussen de ID en ID
Dit doe ik met de volgende code:
MySQL:
1
| T1.ID=IF(T2.MasterID IS NOT NULL, T2.MasterID, T2.ID) |
Dit werkt in princiepe prima, alleen is het rete-traag omdat ik het niet voor elkaar krijg MySQL duidelijk te maken dat het een index moet gebruiken. Zowel ID als MasterID zijn geïndexeerd, maar mysql vindt het toch nodig alle ca 30.000 records af te gaan (bleek uit een EXPLAIN)
iemand enig idee hoe ik dit zo kan herschrijven zodat mysql niet alle records af gaat maar alleen de relevante? (en dus gebruik maakt van de indexen die er op staan)