Lorsque j'ajoute LIMIT 1 à une requête MySQL, arrête-t-il la recherche après avoir trouvé 1 résultat (ce qui la rend plus rapide) ou récupère-t-il toujours tous les résultats et tronque-t-il à la fin?
Lorsque j'ajoute LIMIT 1 à une requête MySQL, arrête-t-il la recherche après avoir trouvé 1 résultat (ce qui la rend plus rapide) ou récupère-t-il toujours tous les résultats et tronque-t-il à la fin?
Réponses:
Selon la requête, l'ajout d'une clause limit peut avoir un effet considérable sur les performances. Si vous ne voulez qu'une seule ligne (ou savez avec certitude qu'une seule ligne peut satisfaire la requête) et que vous n'êtes pas sûr de la manière dont l'optimiseur interne l'exécutera (par exemple, la clause WHERE n'atteignant pas un index et ainsi de suite), alors vous devez absolument ajouter une clause LIMIT.
En ce qui concerne les requêtes optimisées (utilisant des index sur de petites tables), les performances n'auront probablement pas beaucoup d'importance, mais encore une fois - si vous n'êtes intéressé que par une seule ligne, ajoutez une clause LIMIT malgré tout.
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 résultat unique, il y a des avantages.
De plus, la limitation du jeu de résultats peut en fait accélérer le temps total de requête car le transfert de grands jeux de résultats utilise de la mémoire et crée potentiellement des tables temporaires sur le disque. Je mentionne cela car j'ai récemment vu une application qui n'utilisait pas de limite de tuer un serveur en raison d'énormes ensembles de résultats et avec une limite en place, l'utilisation des ressources a considérablement diminué.
Consultez cette page pour plus de détails: Documentation MySQL: Optimisation LIMIT
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 le rendra plus rapide.
La réponse, en bref, est oui. Si vous limitez votre résultat à 1, 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.
Si vous n'attendez vraiment qu'un seul résultat, il est vraiment logique d'ajouter la LIMITE à 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 plus de 100'000 enregistrements juste pour le tronquer à 1 à la fin.
UNIQUE
(ouPRIMARY KEY
) contrainte (ou index) sur la colonne de filtre. stackoverflow.com/questions/8467092/…