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.