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

MIN/MAX vs ORDER BY e LIMIT


Na pior das hipóteses, onde você está olhando para um campo não indexado, usando MIN() requer uma única passagem completa da tabela. Usando SORT e LIMIT requer uma classificação de arquivos. Se executado em uma mesa grande, provavelmente haveria uma diferença significativa no desempenho percebido. Como um ponto de dados anedótico, MIN() levou 0,36s enquanto SORT e LIMIT levou .84s contra uma tabela de 106.000 linhas no meu servidor dev.

Se, no entanto, você estiver olhando para uma coluna indexada, a diferença será mais difícil de notar (o ponto de dados sem sentido é 0,00s em ambos os casos). Olhando para a saída de explicação, no entanto, parece MIN() é capaz de simplesmente extrair o menor valor do índice (linhas 'Selecionar tabelas otimizadas' e 'NULL') enquanto o SORT e LIMIT ainda precisa fazer uma travessia ordenada do índice (106.000 linhas). O impacto real no desempenho é provavelmente insignificante.

Parece MIN() é o caminho a seguir - é mais rápido no pior caso, indistinguível no melhor caso, é SQL padrão e expressa mais claramente o valor que você está tentando obter. O único caso em que parece que usar SORT e LIMIT seria desejável, como mson mencionado, onde você está escrevendo uma operação geral que encontra os valores N superiores ou inferiores de colunas arbitrárias e não vale a pena escrever a operação de caso especial.