Zde je ukázka zobrazující pořadí podmínek klauzule WHERE mohou způsobit rozdíl v důsledku zkratování. Spouští následující dotazy:
-- 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;
Jediný rozdíl mezi nimi je pořadí operandů v OR
podmínka.
myslowfunction
záměrně na sekundu spí a má vedlejší účinek přidání položky do tabulky protokolu při každém spuštění. Zde jsou výsledky toho, co je protokolováno při spuštění dvou dotazů:
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
Výše uvedené ukazuje, že pomalá funkce se provede vícekrát, když se objeví na levé straně OR
stav, kdy druhý operand není vždy pravdivý.
Takže IMO odpověď na otázku:
je "Někdy to může udělat."