Kolejność indeksowania ma znaczenie, gdy warunki zapytania dotyczą tylko PART indeksu. Rozważ:
-
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"
Jeśli Twój indeks to (first_name
, last_name
) użyją go zapytania 1 i 2, zapytanie #3 nie. Jeśli indeks to (last_name
, first_name
) zapytania 1 i 3 będą go używać, zapytanie #2 nie. Zmiana kolejności warunkowej w ramach klauzuli WHERE w obu przypadkach nie ma wpływu.
Szczegóły znajdziesz tutaj
Aktualizacja :
W przypadku, gdy powyższe nie jest jasne - MySQL może używać indeksu tylko wtedy, gdy kolumny w warunkach zapytania tworzą skrajny lewy przedrostek indeksu. Zapytanie #2 powyżej nie może użyć (last_name
, first_name
) indeks, ponieważ opiera się tylko na first_name
i first_name
NIE jest przedrostkiem z lewej strony (last_name
, first_name
) indeks.
Kolejność warunków W zapytaniu nie ma znaczenia; zapytanie nr 1 powyżej będzie mogło użyć (last_name
, first_name
) indeks dobrze, ponieważ jego warunki to first_name
i last_name
i razem wzięte tworzą skrajnie lewy przedrostek (last_name
, first_name
) indeks.