Her er en demo viser rækkefølgen af WHERE-sætningsbetingelser kan gøre en forskel på grund af kortslutning. Den kører følgende forespørgsler:
-- 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;
Den eneste forskel mellem disse er rækkefølgen af operander i OR
tilstand.
myslowfunction
sover bevidst et sekund og har den bivirkning, at den tilføjer en post til en logtabel, hver gang den køres. Her er resultaterne af, hvad der logges, når de to forespørgsler køres:
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
Ovenstående viser, at en langsom funktion udføres flere gange, når den vises på venstre side af en OR
tilstand, når den anden operand ikke altid er sand.
Så IMO svaret på spørgsmålet:
er "Nogle gange kan det gøre."