L'ordine dell'indice è importante quando le condizioni della tua query si applicano solo a PART dell'indice. Considera:
-
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"
Se il tuo indice è (first_name
, last_name
) le query 1 e 2 lo utilizzeranno, la query n. 3 no. Se il tuo indice è (last_name
, first_name
) le query 1 e 3 lo utilizzeranno, la query n. 2 no. La modifica dell'ordine delle condizioni all'interno della clausola WHERE non ha alcun effetto in entrambi i casi.
I dettagli sono qui
Aggiorna :
Nel caso in cui quanto sopra non sia chiaro, MySQL può utilizzare un indice solo se le colonne nelle condizioni di query formano un prefisso all'estrema sinistra dell'indice. La query n. 2 sopra non può utilizzare (last_name
, first_name
) perché si basa solo su first_name
e first_name
NON è il prefisso più a sinistra di (last_name
, first_name
) indice.
L'ordine delle condizioni ALL'INTERNO della query non ha importanza; la query n. 1 sopra sarà in grado di utilizzare (last_name
, first_name
) indice bene perché le sue condizioni sono first_name
e last_name
e, presi insieme, formano un prefisso più a sinistra di (last_name
, first_name
) indice.