Oto demo pokazując kolejność warunków klauzuli WHERE może zrobić różnicę z powodu zwarcia. Uruchamia następujące zapytania:
-- 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;
Jedyną różnicą między nimi jest kolejność operandów w OR
stan.
myslowfunction
celowo śpi na sekundę i ma efekt uboczny polegający na dodawaniu wpisu do tabeli dziennika za każdym razem, gdy jest uruchamiany. Oto wyniki tego, co jest rejestrowane podczas uruchamiania dwóch zapytań:
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
Powyższe pokazuje, że powolna funkcja jest wykonywana więcej razy, gdy pojawia się po lewej stronie OR
warunek, gdy drugi operand nie zawsze jest prawdziwy.
Więc IMO odpowiedź na pytanie:
to „Czasami może to zrobić”.