不要なチェックを避けることでパフォーマンスを向上させるために、MS Sql サーバーが短絡理論をサポートしていることは明らかですが、
サポート例:
SELECT 'TEST'
WHERE 1 = 'A'
SELECT 'TEST'
WHERE 1 = 1 OR 1 = 'A'
ここで、最初の例では、「varchar 値 'A' をデータ型 int に変換するときに変換に失敗しました。」というエラーが発生します。
条件 1 = 1 が TRUE と評価されるため、2 番目の条件は簡単に実行されるため、2 番目の条件はまったく実行されません。
さらに
SELECT 'TEST'
WHERE 1 = 0 OR 1 = 'A'
ここでは、最初の条件が false と評価されるため、DBMS は 2 番目の条件に進み、上記の例のように変換エラーが発生します。
注: クエリの結果がエラーである場合、条件が実行または短絡されていることを理解するためだけに誤った条件を書きました。
簡単な説明
検討、
WHERE 1 = 1 OR 2 = 2
最初の条件がTRUEに評価されるため、2 番目の条件を評価しても意味がありません。これは、どの値で評価しても結果にまったく影響しないため、Sql Server が不要な条件チェックまたは評価をスキップしてクエリ実行時間を節約する良い機会です。 .
「OR」の場合、最初の条件がTRUEと評価された場合、 「OR 」で接続されたチェーン全体が、他の条件を評価せずに真と評価されたと見なされます。
condition1 OR condition2 OR ..... OR conditionN
condition1 が true と評価された場合、conditionN がスキップされるまですべての条件を休止します。最初のTRUEの決定における一般化された言葉では、OR によってリンクされた他のすべての条件はスキップされます。
2番目の条件を検討してください
WHERE 1 = 0 AND 1 = 1
最初の条件がFALSEに評価されているため、2 番目の条件を評価しても意味がありません。これは、どの値で評価しても結果にまったく影響しないため、Sql Server が不要な条件チェックまたは評価をスキップしてクエリ実行時間を節約する良い機会です。 .
「AND」の場合、最初の条件がFALSEと評価された場合、 「AND」に接続されたチェーン全体が他のものを評価せずに FALSE と評価されたと見なされます。
condition1 AND condition2 AND ..... conditionN
condition1 がFALSEと評価された場合、 conditionNがスキップされるまですべての条件を休止します。最初のFALSEの決定で一般化された言葉で言えば、ANDでリンクされた他のすべての条件はスキップされます。
したがって、賢明なプログラマーは常に、費用がかからない、または最も排除する条件が最初に評価されるような方法で一連の条件をプログラムするか、または短絡の最大の利益を得ることができるような方法で条件を調整する必要があります。