Na pořadí indexů záleží, když se podmínky vašeho dotazu vztahují pouze na PART indexu. Zvažte:
-
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"
Pokud je váš index (first_name , last_name ) dotazy 1 a 2 jej použijí, dotaz č. 3 nikoli. Pokud je váš index (last_name , first_name ) dotazy 1 a 3 jej použijí, dotaz č. 2 nikoli. Změna pořadí podmínek v klauzuli WHERE nemá žádný účinek ani v jednom případě.
Podrobnosti jsou zde
Aktualizovat :
V případě, že výše uvedené není jasné - MySQL může použít index pouze v případě, že sloupce v podmínkách dotazu tvoří předponu indexu zcela vlevo. Dotaz č. 2 výše nelze použít (last_name , first_name ), protože je založen pouze na first_name a first_name NENÍ předpona zcela vlevo od (last_name , first_name ) index.
Na pořadí podmínek V rámci dotazu nezáleží; dotaz #1 výše bude moci použít (last_name , first_name ) index je v pořádku, protože jeho podmínky jsou first_name a last_name a dohromady tvoří předponu zcela vlevo (last_name , first_name ) index.