Maison >base de données >tutoriel mysql >Optimisation de la clause EXISTS : SELECT 1 vs SELECT * — Est-ce important ?
*Performances de la clause EXISTS : SELECT 1 contre SELECT **
En SQL, la clause EXISTS est utilisée pour vérifier s'il existe des lignes correspondant à la condition spécifiée dans la sous-requête. Les développeurs utilisent depuis longtemps à la fois SELECT 1 et SELECT * dans les requêtes EXISTS, ce qui soulève la question : quelle approche est la plus efficace ?
Optimisation du serveur SQL
Selon Microsoft, SQL Server est suffisamment intelligent pour reconnaître l'utilisation de EXISTS quelle que soit la liste SELECT de la sous-requête. Il ne renvoie aucune donnée au système, les clauses SELECT * et SELECT 1 sont donc équivalentes en termes de performances.
D'après la documentation de Microsoft :
"La liste de sélection d'une sous-requête introduite par EXISTS contient presque toujours un astérisque (). Il n'y a aucune raison de lister les noms de colonnes, puisque vous testez simplement s'il existe des lignes qui satisfont aux conditions spécifié dans la sous-requête .*"
Auto-vérification
Pour confirmer ce comportement, vous pouvez exécuter la requête suivante :
<code class="language-sql">SELECT whatever FROM yourtable WHERE EXISTS(SELECT 1/0 FROM someothertable WHERE a_valid_clause)</code>
Si la liste SELECT participe, cette requête déclenchera une erreur de division par zéro. Toutefois, étant donné que SQL Server comprend le contexte de la clause EXISTS, il n'effectue aucun calcul sur la liste SELECT.
Standard SQL
La norme ANSI SQL 1992 clarifie davantage ce comportement, en précisant que dans le contexte du prédicat EXISTS, la liste de sélection "*" est équivalente à n'importe quelle valeur littérale.
Conclusion
Dans SQL Server, la sélection de SELECT 1 et SELECT * dans la clause EXISTS n'affecte pas les performances. Les deux méthodes produisent les mêmes résultats car l'optimiseur reconnaît leur objectif et ne renvoie aucune donnée au système.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!