Indexvolgorde is van belang wanneer uw vraagvoorwaarden alleen van toepassing zijn op PART van de index. Overweeg:
-
SELECT * FROM table WHERE first_name="john" AND last_name="doe" -
SELECT * FROM table WHERE first_name="john" -
SELECT * FROM table WHERE last_name="doe"
Als uw index is (first_name , last_name ) query's 1 en 2 zullen het gebruiken, query #3 niet. Als uw index (last_name is) , first_name ) query 1 en 3 zullen het gebruiken, query #2 niet. Het wijzigen van de conditievolgorde binnen de WHERE-clausule heeft in beide gevallen geen effect.
Details zijn hier
Bijwerken :
In het geval dat het bovenstaande niet duidelijk is - MySQL kan alleen een index gebruiken als de kolommen in de queryvoorwaarden een meest linkse prefix van de index vormen. Query #2 hierboven kan niet worden gebruikt (last_name , first_name ) index omdat deze alleen is gebaseerd op first_name en first_name is NIET het meest linkse voorvoegsel van de (last_name , first_name ) index.
De volgorde van de voorwaarden BINNEN de query doet er niet toe; query #1 hierboven kan gebruiken (last_name , first_name ) index prima omdat de voorwaarden zijn first_name en last_name en samen vormen ze WEL het meest linkse voorvoegsel van (last_name , first_name ) index.