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

¿Por qué MySQL no usa un índice para una comparación mayor que?

Probablemente sea mejor que deje que MySql decida el plan de consulta. Existe una buena posibilidad de que hacer un escaneo de índice sea menos eficiente que un escaneo de tabla completa.

Hay dos estructuras de datos en el disco para esta tabla

  1. La mesa en sí; y
  2. El índice B-Tree de la clave principal.

Cuando ejecuta una consulta, el optimizador tiene dos opciones sobre cómo acceder a los datos:

SELECT * FROM userapplication WHERE application_id > 1025;

Uso del índice

  1. Escanee el índice B-Tree para encontrar la dirección de todas las filas donde application_id > 1025
  2. Lea las páginas correspondientes de la tabla para obtener los datos de estas filas.

No usar el Índice

Explore toda la tabla y elija los registros apropiados.

Elegir la mejor estrategia

El trabajo del optimizador de consultas es elegir la estrategia más eficiente para obtener los datos que desea. Si hay muchas filas con un application_id > 1025 entonces en realidad puede ser menos eficiente usar el índice. Por ejemplo, si el 90 % de los registros tienen un application_id > 1025 luego, el optimizador de consultas tendría que escanear alrededor del 90% de los nodos de hoja del índice del árbol b y luego leer al menos el 90% de la tabla también para obtener los datos reales; esto implicaría leer más datos del disco que solo escanear la tabla.