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

Otimizando a consulta mysql para usar o índice para classificação


Acredito que a consulta que você tem provavelmente corresponde a uma grande porcentagem dos dados na tabela. Em situações como essa, o otimizador do MySQL geralmente opta por fazer uma varredura de tabela e ignorar os índices completamente, pois é realmente mais rápido do que passar pelo problema da leitura adicional de todo o índice e usá-lo para selecionar os dados. Então, neste caso, estou supondo que public_private='yes' and approved='yes' corresponde a uma boa parte da sua mesa. Portanto, se o MySQL pular usando o índice por causa disso, ele também não estará disponível para classificação.

Se você realmente deseja que ele use um índice, a solução seria usar FORCE INDEX :
select * from videos FORCE INDEX (approved_2) where public_private='public' and approved='yes' order by number_of_views desc;

No entanto, eu faria alguns testes para ter certeza de que o que você está obtendo é realmente mais rápido do que o otimizador do MySQL escolheu fazer. Aparentemente, o otimizador tem alguns problemas fazendo seleções para pedidos, então você pode definitivamente tentar e ver se obtém um desempenho aprimorado.