デモはこちら WHERE句の条件の順序を示すできる 短絡により違いが生じます。次のクエリを実行します:
-- query #1
SELECT myint FROM mytable WHERE myint >= 3 OR myslowfunction('query #1', myint) = 1;
-- query #2
SELECT myint FROM mytable WHERE myslowfunction('query #2', myint) = 1 OR myint >= 3;
これらの唯一の違いは、OR
のオペランドの順序です。 状態。
myslowfunction
意図的に1秒間スリープし、実行されるたびにログテーブルにエントリを追加するという副作用があります。 2つのクエリを実行したときにログに記録された結果は次のとおりです。
myslowfunction called for query #1 with value 1
myslowfunction called for query #1 with value 2
myslowfunction called for query #2 with value 1
myslowfunction called for query #2 with value 2
myslowfunction called for query #2 with value 3
myslowfunction called for query #2 with value 4
上記は、slow関数がOR
の左側に表示されると、より多く実行されることを示しています。 他のオペランドが常に真であるとは限らない場合の条件。
したがって、IMOは質問に対する答えです:
「時々それができる」です。