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

¿Por qué mysql golpea el índice cuando la columna se ajusta con la función de fecha?

Se sabe que el informe EXPLAIN es difícil de interpretar. Han sobrecargado demasiada información en unos pocos campos. Podrías intentar

El type: index indica que está haciendo un examen de índice , lo que significa que está visitando cada entrada en el índice.

Esto visita la misma cantidad de entradas que un escaneo de tabla, excepto que se compara con un índice secundario en lugar del índice agrupado (primario).

Cuando vemos type: index , EXPLAIN muestra possible_keys: NULL lo que significa que no puede usar ningún índice para buscar de manera eficiente. Pero también muestra key: add_time lo que significa que el índice que está usando para el escaneo de índice es add_time .

El escaneo de índice se debe al hecho de que MySQL no puede optimizar expresiones o llamadas a funciones por sí mismo. Por ejemplo, si intentara buscar fechas con un mes específico, podría buscar month(add_time) = 4 pero eso no usaría el índice en add_time porque las fechas con ese mes están dispersas en el índice, no todas agrupadas.

Es posible que sepa que date(add_time) debería poder buscarse por el índice, pero MySQL no hace esa inferencia. MySQL solo ve que estás usando una función y ni siquiera intenta usar el índice.

Es por eso que MySQL 5.7 introdujo columnas generadas para permitirnos indexar una expresión, y MySQL 8.0 lo hizo aún mejor al permitir un índice a definido para una expresión sin requerir que primero definamos una columna generada.