Indeksrækkefølgen er vigtig, når dine forespørgselsbetingelser kun gælder for DEL af indekset. Overvej:
-
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"
Hvis dit indeks er (first_name
, last_name
) forespørgsler 1 og 2 vil bruge det, forespørgsel #3 vil ikke. Hvis dit indeks er (last_name
, first_name
) forespørgsel 1 og 3 vil bruge det, forespørgsel #2 vil ikke. Ændring af betingelsesrækkefølgen inden for WHERE-sætningen har ingen effekt i begge tilfælde.
Detaljer er her
Opdater :
I tilfælde af at ovenstående ikke er klart - MySQL kan kun bruge et indeks, hvis kolonnerne i forespørgselsbetingelser danner et præfiks længst til venstre for indekset. Forespørgsel #2 ovenfor kan ikke bruge (last_name
, first_name
) indeks, fordi det kun er baseret på first_name
og first_name
er IKKE præfikset længst til venstre for (last_name
, first_name
) indeks.
Rækkefølgen af betingelser INDEN FOR forespørgslen er ligegyldig; forespørgsel #1 ovenfor vil kunne bruge (last_name
, first_name
) indeks helt fint, fordi dets betingelser er first_name
og last_name
og tilsammen danner de et præfiks længst til venstre for (last_name
, first_name
) indeks.