Maison >base de données >tutoriel mysql >La clause WHERE de SQL garantit-elle une évaluation des courts-circuits ?
Clause SQL WHERE : évaluation de court-circuit – mythe ou réalité ?
La clause WHERE
de SQL implique l'évaluation d'expressions booléennes. La question se pose : utilise-t-on le court-circuit, en arrêtant l’évaluation une fois le résultat certain ? Cela a un impact significatif sur l'optimisation et les performances des requêtes.
Court-circuit : garanti ou spécifique au système ?
La norme ANSI SQL 2003 indique un ordre général d'évaluation de gauche à droite pour les expressions de clause WHERE
. Cependant, il indique explicitement que l'ordre d'évaluation réel dépend de la mise en œuvre. Chaque système de gestion de base de données (SGBD) possède ses propres stratégies d'optimisation pour l'évaluation des expressions booléennes.
Comportement spécifique au SGBD
Différents systèmes de bases de données gèrent cela différemment :
Exemple illustratif
Considérez cette WHERE
clause :
<code class="language-sql">SELECT * FROM Table t WHERE @key IS NULL OR (@key IS NOT NULL AND @key = t.Key)</code>
Si @key
est NULL
, la première condition (@key IS NULL
) est vraie. La norme ANSI laisse l'évaluation de la deuxième condition (@key IS NOT NULL AND @key = t.Key
) au SGBD.
Conclusion : La présence et le comportement des courts-circuits dans les clauses WHERE
SQL ne sont pas standardisés. S'en remettre à son exactitude est risqué. Les développeurs doivent consulter la documentation spécifique de leur SGBD et effectuer des tests empiriques pour déterminer le comportement réel de l'évaluation.
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!