web-dev-qa-db-fra.com

Est-ce que l'ajout de «LIMIT 1» aux requêtes MySQL les rend plus rapides lorsque vous savez qu'il n'y aura qu'un seul résultat?

Lorsque j'ajoute LIMIT 1 à une requête MySQL, cela arrête-t-il la recherche après avoir trouvé 1 résultat (le rendant ainsi plus rapide) ou récupère-t-il toujours tous les résultats et tronque-t-il à la fin?

80
Logan Serman

Selon la requête, l'ajout d'une clause limite peut avoir un effet énorme sur les performances. Si vous ne voulez qu'une seule ligne (ou sachez qu'une seule ligne peut satisfaire la requête) et que vous n'êtes pas sûr de la façon dont l'optimiseur interne l'exécutera (par exemple, la clause WHERE ne frappant pas un index, etc.), alors vous devez absolument ajouter une clause LIMIT.

En ce qui concerne les requêtes optimisées (en utilisant des index sur de petites tables), cela n'aura probablement pas beaucoup d'importance en termes de performances, mais encore une fois - si vous n'êtes intéressé que par une ligne, ajoutez une clause LIMIT malgré tout.

73
Eran Galperin

La limite peut affecter les performances de la requête (voir les commentaires et le lien ci-dessous) et elle réduit également le jeu de résultats généré par MySQL. Pour une requête dans laquelle vous attendez un seul résultat, il y a des avantages.

De plus, la limitation de l'ensemble de résultats peut en fait accélérer le temps total de requête, car le transfert de grands ensembles de résultats utilise de la mémoire et peut créer des tables temporaires sur le disque. Je mentionne cela car j'ai récemment vu une application qui n'utilisait pas de limite tuer un serveur en raison d'énormes ensembles de résultats et avec une limite en place, l'utilisation des ressources a considérablement chuté.

Consultez cette page pour plus de détails: Documentation MySQL: LIMIT Optimization

18
rjamestaylor

S'il n'y a qu'un seul résultat qui revient, alors non, LIMIT ne le rendra pas plus rapide. S'il y a beaucoup de résultats, et que vous n'avez besoin que du premier résultat, et qu'il n'y a pas d'instructions GROUP ou ORDER by, LIMIT accélérera.

4
Kris Erickson

La réponse, en bref, est oui. Si vous limitez votre résultat à 1, alors même si vous "attendez" un résultat, la requête sera plus rapide car votre base de données ne parcourra pas tous vos enregistrements. Il s'arrêtera simplement une fois qu'il aura trouvé un enregistrement correspondant à votre requête.

3
Max Alexander Hanna

Si vous ne vous attendez vraiment qu'à un seul résultat, il est vraiment judicieux d'ajouter le LIMIT à votre requête. Je ne connais pas le fonctionnement interne de MySQL, mais je suis sûr qu'il ne rassemblera pas un ensemble de résultats de 100'000 + enregistrements juste pour le tronquer à 1 à la fin ..

1
driAn