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

Consulta de ralentización del índice MySQL

Parece que article_id es la clave principal para la tabla de artículos.

Dado que está agrupando por article_id, MySQL necesita devolver los registros en orden por esa columna, para poder realizar el GROUP BY.

Puede ver que sin el índice, escanea todos los registros en la tabla de artículos, pero al menos están ordenados por article_id, por lo que no se requiere una ordenación posterior. La optimización LIMIT se puede aplicar aquí, dado que ya está en orden, puede detenerse después de obtener cinco filas.

En la consulta con el índice en tag.name, en lugar de escanear toda la tabla de artículos, utiliza el índice, pero contra la tabla de etiquetas, y comienza allí. Desafortunadamente, al hacer esto, los registros deben ordenarse más tarde por artículo.article_id para completar la cláusula GROUP BY. La optimización LIMIT no se puede aplicar ya que debe devolver el conjunto de resultados completo y luego ordenarlo para obtener las primeras 5 filas.

En este caso, MySQL simplemente adivina mal.

Sin la cláusula LIMIT, supongo que usar el índice es más rápido, que es quizás lo que suponía MySQL.