Tenho notado repetidas vezes que quando EXPLAIN
consulto com uma GROUP BY
cláusula, recebo filesort
como condição extra. Há muito tempo eu li uma sugestão para usar GROUP BY NULL
nesses casos para evitar o filesort, e de fato elimina essa filesort
condição de aparência desagradável.
Eu pensaria que, se nenhuma ORDER BY
cláusula estiver presente, o dbms apresentaria apenas uma ordem arbitrária ou o que for mais eficiente, em vez de ordenar por alguma coluna misteriosa que exija uma classificação de arquivos. Parece estranho para mim que eu precise incluir uma direção extra que basicamente equivale a dizer "não faça nada estúpido" .
Minha pergunta é por que isso é necessário e está adicionando ORDER BY NULL
realmente ajudando o desempenho?
Manual de Referência do MySQL 5.7 / ... / Sintaxe SELECT
Using filesort
aparece quando a(s) coluna(s) usada(s) para agrupamento não possui um índice apropriado. Conforme mencionado acima, os resultados retornados porGROUP BY
são ordenados pela(s) mesma(s) coluna(s). Se você conseguirfilesort
classificar, também terá o filesort para agrupamento. Esse desempenho insulto da mesma maneira. Portanto, você deve criar o índice, não suprimir a classificação.Não
filesort
semORDER BY NULL
.PS
No que diz respeito ao fidlle falhar, aqui está a
mysql
saída:Sem índice de várias colunas:
Índice de várias colunas adicionado: