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」で接続されたチェーン全体が、他の条件を評価せずにtrueと評価されたと見なされます。
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でリンクされた他のすべての条件はスキップされます。
したがって、賢明なプログラマーは、常に、より安価な、または最も排除的な条件が最初に評価されるような方法で条件の連鎖をプログラムするか、または短絡の最大の利益を得ることができるような方法で条件を調整する必要があります。
よろしくお願いいたします。
Rk_Hirpara