Quando adiciono LIMIT 1 a uma consulta MySQL, ele interrompe a pesquisa depois de encontrar 1 resultado (tornando-o mais rápido) ou ainda busca todos os resultados e trunca no final?
Quando adiciono LIMIT 1 a uma consulta MySQL, ele interrompe a pesquisa depois de encontrar 1 resultado (tornando-o mais rápido) ou ainda busca todos os resultados e trunca no final?
Respostas:
Dependendo da consulta, adicionar uma cláusula de limite pode ter um grande efeito no desempenho. Se você deseja apenas uma linha (ou sabe com certeza que apenas uma linha pode satisfazer a consulta) e não tem certeza sobre como o otimizador interno irá executá-la (por exemplo, a cláusula WHERE não atinge um índice e assim por diante), então você definitivamente deve adicionar uma cláusula LIMIT.
Quanto às consultas otimizadas (usando índices em tabelas pequenas), provavelmente não importará muito no desempenho, mas, novamente - se você está interessado apenas em uma linha, adicione uma cláusula LIMIT independentemente.
O limite pode afetar o desempenho da consulta (consulte os comentários e o link a seguir) e também reduz o conjunto de resultados que é gerado pelo MySQL. Para uma consulta em que você espera um único resultado, há benefícios.
Além disso, limitar o conjunto de resultados pode, de fato, acelerar o tempo total de consulta, pois a transferência de grandes conjuntos de resultados usa memória e, potencialmente, cria tabelas temporárias no disco. Mencionei isso porque recentemente vi um aplicativo que não usava limit kill em um servidor devido aos enormes conjuntos de resultados e, com o limite estabelecido, a utilização de recursos caiu tremendamente.
Verifique esta página para obter mais detalhes: Documentação MySQL: Otimização LIMIT
Se houver apenas 1 resultado retornando, então não, LIMIT não o tornará mais rápido. Se houver muitos resultados e você só precisar do primeiro resultado, e não houver instruções GROUP ou ORDER by, LIMIT tornará isso mais rápido.
A resposta, em resumo, é sim. Se você limitar seu resultado a 1, mesmo que esteja "esperando" um resultado, a consulta será mais rápida porque seu banco de dados não examinará todos os seus registros. Ele simplesmente parará quando encontrar um registro que corresponda à sua consulta.
Se você realmente espera apenas um único resultado, realmente faz sentido acrescentar LIMIT à sua consulta. Não conheço o funcionamento interno do MySQL, mas tenho certeza de que ele não coletará um conjunto de resultados de mais de 100.000 registros apenas para truncá-lo de volta para 1 no final.
UNIQUE
(ouPRIMARY KEY
) restrição (ou índice) na coluna do filtro. stackoverflow.com/questions/8467092/…