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によってリンクされた他のすべての条件はスキップされます。
したがって、賢明なプログラマーは常に、費用がかからないか、または最も少ない条件が最初に評価されるような条件のチェーンをプログラムするか、または短絡の利益を最大にすることができるような条件を整える必要があります