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.