Maison >base de données >tutoriel mysql >SELECT 1 contre SELECT * dans les sous-requêtes EXISTS : est-ce important pour les performances ?
*Optimisation de la sous-requête EXISTS : différence de performances entre SELECT 1 et SELECT **
Lors de l'utilisation de l'opérateur EXISTS dans une requête SQL, il existe un différend quant à savoir s'il faut spécifier SELECT 1 ou SELECT * dans la sous-requête. Cet article explore l’impact sur les performances des deux approches.
**Méthode traditionnelle : SELECT ***
Traditionnellement, les sous-requêtes utilisent SELECT * car elles récupèrent toutes les colonnes de la sous-requête.
<code class="language-sql">IF EXISTS (SELECT * FROM TABLE WHERE Columns=@Filters) BEGIN UPDATE TABLE SET ColumnsX=ValuesX WHERE Columns=@Filters END</code>
Méthode alternative : SELECT 1
Les experts en bases de données recommandent que pour les vérifications EXISTS, l'utilisation de SELECT 1 soit plus efficace car elle ne renvoie qu'une seule valeur.
<code class="language-sql">IF EXISTS (SELECT 1 FROM TABLE WHERE Columns=@Filters) BEGIN UPDATE TABLE SET ColumnsX=ValuesX WHERE Columns=@Filters END</code>
Différence de performances
Malgré les prétendus avantages potentiels en termes de performances de SELECT 1, Microsoft SQL Server est conçu pour optimiser les sous-requêtes de l'opérateur EXISTS. Que vous utilisiez SELECT 1 ou SELECT *, SQL Server ne renvoie pas de données au système.
Vérification
Pour vérifier cette optimisation, essayez d'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>
Aucune erreur ne sera générée même si la sous-requête effectue une division invalide. Cela indique que la liste EXISTS dans la sous-requête SELECT ne sera pas évaluée.
Standard SQL
La norme ANSI SQL 1992 indique clairement que lorsqu'une liste SELECT contient uniquement "*" dans la sous-requête EXISTS, elle équivaut à un littéral arbitraire.
Conclusion
Sur la base des capacités d'optimisation de SQL Server et des normes SQL, il n'y a aucune différence de performances lors de l'utilisation de SELECT 1 ou SELECT * dans une sous-requête EXISTS. Les deux méthodes renverront les mêmes résultats avec la même efficacité.
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!