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

Usando índice, usando temporário, usando filesort - como corrigir isso?


Bem, o documento fornece as razões exatas quando "Usando temporário" aparecerá:

Tabelas temporárias podem ser criadas em condições como estas:

Se houver uma cláusula ORDER BY e uma cláusula GROUP BY diferente, ou se ORDER BY ou GROUP BY contiver colunas de tabelas diferentes da primeira tabela na fila de junção, uma tabela temporária será criada.

DISTINCT combinado com ORDER BY pode exigir uma tabela temporária.

Se você usar a opção SQL_SMALL_RESULT, o MySQL usará uma tabela temporária na memória, a menos que a consulta também contenha elementos (descritos posteriormente) que requerem armazenamento em disco.

Uma varredura rápida mostra que você sofre de #1.

E este blog de 2009 diz que "usar filesort" significa que a classificação não pode ser realizada com um índice. Como você está ordenando por um campo calculado, isso também será verdade.

Então, isso é o que está "errado".