El orden del índice es importante cuando las condiciones de su consulta solo se aplican a PARTE del índice Considere:
-
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"
Si su índice es (first_name , last_name ) las consultas 1 y 2 lo usarán, la consulta n.º 3 no. Si su índice es (last_name , first_name ) las consultas 1 y 3 lo usarán, la consulta n.º 2 no. Cambiar el orden de las condiciones dentro de la cláusula WHERE no tiene efecto en ningún caso.
Los detalles están aquí
Actualizar :
En caso de que lo anterior no esté claro, MySQL solo puede usar un índice si las columnas en las condiciones de consulta forman un prefijo más a la izquierda del índice. La consulta #2 anterior no puede usar (last_name , first_name ) índice porque solo se basa en first_name y first_name NO es el prefijo más a la izquierda de (last_name , first_name ) índice.
El orden de las condiciones DENTRO de la consulta no importa; la consulta #1 anterior podrá usar (last_name , first_name ) índice bien porque sus condiciones son first_name y last_name y, tomados en conjunto, SÍ forman un prefijo más a la izquierda de (last_name , first_name ) índice.