Optimisation des instructions CASE dans les clauses WHERE de SQL Server 2008
L'emploi d'instructions CASE
dans des clauses WHERE
dans SQL Server 2008 peut parfois entraîner des problèmes de performances ou des résultats incorrects. La clé est de comprendre comment intégrer correctement l'instruction CASE
dans la logique conditionnelle globale.
Utilisation correcte :
Une déclaration CASE
doit toujours faire partie d'une comparaison plus large, et non la seule comparaison elle-même. La structure correcte implique d'utiliser l'instruction CASE
pour produire une valeur qui est ensuite comparée :
<code class="language-sql">WHERE co.DTEntered = CASE WHEN LEN('blah') = 0 THEN co.DTEntered ELSE '2011-01-01' END</code>
Utilisation incorrecte (et pourquoi elle échoue) :
L'exemple suivant est erroné car l'instruction CASE
ne produit pas de valeur de comparaison ; il tente de contrôler directement l'ensemble de l'opération de comparaison, ce qui n'est pas ainsi que CASE
fonctionne dans une clause WHERE
:
<code class="language-sql">WHERE CASE LEN('TestPerson') WHEN 0 THEN co.personentered = co.personentered ELSE co.personentered LIKE '%TestPerson' END</code>
Une meilleure approche : utiliser les instructions OR
Lorsque vous avez besoin d'une instruction CASE
dans une clause WHERE
, la refactorisation en instructions OR
fournit souvent une solution plus efficace et plus lisible :
<code class="language-sql">WHERE ( (LEN('TestPerson') = 0 AND co.personentered = co.personentered ) OR (LEN('TestPerson') > 0 AND co.personentered LIKE '%TestPerson') )</code>
Implications sur les performances :
Les instructions CASE
et les conditions OR
complexes dans les clauses WHERE
peuvent entraver l'optimisation des requêtes et l'utilisation de l'index. Efforcez-vous toujours d’obtenir la clause WHERE
la plus simple et la plus efficace possible. Envisagez des structures de requêtes alternatives ou des stratégies d'indexation pour améliorer les performances si nécessaire.
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!