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

Alguma maneira de evitar um filesort quando order by é diferente da cláusula where?


Observe que o termo MySQL filesort não significa necessariamente que grava no disco. Significa apenas que vai ordenar sem usar um índice. Se o conjunto de resultados for pequeno o suficiente, o MySQL irá classificá-lo na memória, o que é muito mais rápido que a E/S do disco.

Você pode aumentar a quantidade de memória que o MySQL aloca para classificações de arquivos na memória usando o sort_buffer_size variável do servidor. No MySQL 5.1, o tamanho padrão do buffer de classificação é 2 MB e o máximo que você pode alocar é 4 GB.

atualizar: Em relação ao comentário de Jonathan Leffler sobre medir quanto tempo a classificação leva, você pode aprender a usar SHOW PROFILE FOR QUERY que fornecerá o detalhamento de quanto tempo leva cada fase da execução da consulta.