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.