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

MySQL:¿Por qué la quinta ID en la cláusula IN cambia drásticamente el plan de consulta?

Como ha demostrado, MySQL tiene dos planes de consulta alternativos para consultas con ORDER BY ... LIMIT n :

  1. Lea todas las filas que califiquen, ordénelas y elija el n filas superiores.
  2. Lea las filas en orden y deténgase cuando n se han encontrado filas calificadas.

Para decidir cuál es la mejor opción, el optimizador necesita estimar el efecto de filtrado de su condición WHERE. Esto no es sencillo, especialmente para columnas que no están indexadas o para columnas donde los valores están correlacionados. En su caso, uno probablemente tenga que leer mucho más de la tabla en orden para encontrar las primeras 25 filas calificadas de lo que esperaba el optimizador.

Ha habido varias mejoras en la forma en que se manejan las consultas LIMIT, tanto en versiones posteriores de 5.6 (¡usted está ejecutando una versión anterior a GA!) como en versiones más nuevas (5.7, 8.0). Le sugiero que intente actualizar a una versión posterior y ver si esto sigue siendo un problema.

En general, si desea comprender las decisiones del planificador de consultas, debe consultar el seguimiento del optimizador para la consulta.