SQL Server 2008 の WHERE 句での CASE ステートメントの最適化
SQL Server 2008 の CASE
句内で WHERE
ステートメントを使用すると、パフォーマンスの問題や不正な結果が発生する場合があります。 重要なのは、CASE
ステートメントを全体の条件ロジックに正しく統合する方法を理解することです。
正しい使い方:
CASE
ステートメントは、唯一の比較そのものではなく、常により大きな比較の一部である必要があります。 正しい構造には、CASE
ステートメントを使用して値を生成し、その後比較することが含まれます。
<code class="language-sql">WHERE co.DTEntered = CASE WHEN LEN('blah') = 0 THEN co.DTEntered ELSE '2011-01-01' END</code>
間違った使用法 (および失敗する理由):
次の例には欠陥があります。CASE
ステートメントは比較のための値を生成しないからです。これは比較演算全体を直接制御しようとしますが、これは CASE
句での WHERE
の動作とは異なります:
<code class="language-sql">WHERE CASE LEN('TestPerson') WHEN 0 THEN co.personentered = co.personentered ELSE co.personentered LIKE '%TestPerson' END</code>
より良いアプローチ: OR ステートメントの使用
CASE
句内で WHERE
ステートメントが必要な場合は、OR
ステートメントにリファクタリングすると、より効率的で読みやすいソリューションが得られることがよくあります。
<code class="language-sql">WHERE ( (LEN('TestPerson') = 0 AND co.personentered = co.personentered ) OR (LEN('TestPerson') > 0 AND co.personentered LIKE '%TestPerson') )</code>
パフォーマンスへの影響:
CASE
文と OR
句内の複雑な WHERE
条件の両方により、クエリの最適化とインデックスの使用が妨げられる可能性があります。 可能な限り最も単純で効率的な WHERE
句を常に目指してください。 必要に応じて、パフォーマンスを向上させるために、代替のクエリ構造またはインデックス付け戦略を検討してください。
以上がSQL Server 2008 の「WHERE」句の「CASE」ステートメントを最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。