sql >> Base de Datos >  >> RDS >> Mysql

Índices y orden de MySQL

El orden del índice es importante cuando las condiciones de su consulta solo se aplican a PARTE del índice Considere:

  1. SELECT * FROM table WHERE first_name="john" AND last_name="doe"

  2. SELECT * FROM table WHERE first_name="john"

  3. 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.