Индексният ред има значение, когато условията на вашата заявка се отнасят само за ЧАСТ на индекса. Помислете за:
-
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"
Ако вашият индекс е (first_name
, last_name
) заявки 1 и 2 ще го използват, заявка #3 няма. Ако вашият индекс е (last_name
, first_name
) заявки 1 и 3 ще го използват, заявка №2 няма. Промяната на реда на условието в клаузата WHERE няма ефект и в двата случая.
Подробности са тук
Актуализиране :
В случай, че горното не е ясно - MySQL може да използва индекс само ако колоните в условията на заявка образуват най-левия префикс на индекса. Заявка №2 по-горе не може да използва (last_name
, first_name
) индекс, защото се основава само на first_name
и first_name
НЕ е най-левият префикс на (last_name
, first_name
) индекс.
Редът на условията В рамките на заявката няма значение; заявка №1 по-горе ще може да използва (last_name
, first_name
) индекс е добре, защото условията му са first_name
и last_name
и, взети заедно, те образуват най-лявата префикса на (last_name
, first_name
) индекс.