Maison > base de données > tutoriel mysql > Comment puis-je optimiser les instructions « CASE » dans la clause « WHERE » de SQL Server 2008 ?

Comment puis-je optimiser les instructions « CASE » dans la clause « WHERE » de SQL Server 2008 ?

Barbara Streisand
Libérer: 2025-01-11 09:23:43
original
421 Les gens l'ont consulté

How Can I Optimize `CASE` Statements in SQL Server 2008's `WHERE` Clause?

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal