Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Índice MySQL abrandando a consulta


Parece que article_id é a chave primária para a tabela de artigos.

Como você está agrupando por article_id, o MySQL precisa retornar os registros em ordem por essa coluna, para realizar o GROUP BY.

Você pode ver que, sem o índice, ele verifica todos os registros na tabela de artigos, mas eles estão pelo menos em ordem por article_id, portanto, nenhuma classificação posterior é necessária. A otimização LIMIT pode ser aplicada aqui, uma vez que já está em ordem, ela pode parar depois de obter cinco linhas.

Na consulta com o índice em tag.name, em vez de varrer toda a tabela de artigos, ele utiliza o índice, mas contra a tabela de tags, e começa aí. Infelizmente, ao fazer isso, os registros devem ser classificados posteriormente por article.article_id para completar a cláusula GROUP BY. A otimização LIMIT não pode ser aplicada, pois deve retornar todo o conjunto de resultados e, em seguida, ordená-lo, para obter as primeiras 5 linhas.

Neste caso, o MySQL apenas adivinha erradamente.

Sem a cláusula LIMIT, suponho que usar o índice seja mais rápido, o que talvez seja o que o MySQL estava adivinhando.