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.