Hier is een demo de volgorde van de WHERE-clausulevoorwaarden tonen can verschil maken door kortsluiting. Het voert de volgende zoekopdrachten uit:
-- 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;
Het enige verschil tussen deze is de volgorde van de operanden in de OR
staat.
myslowfunction
slaapt opzettelijk een seconde en heeft als neveneffect dat het elke keer dat het wordt uitgevoerd een item aan een logtabel toevoegt. Hier zijn de resultaten van wat er wordt vastgelegd bij het uitvoeren van de twee zoekopdrachten:
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
Het bovenstaande laat zien dat een langzame functie vaker wordt uitgevoerd wanneer deze aan de linkerkant van een OR
. verschijnt voorwaarde wanneer de andere operand niet altijd waar is.
Dus IMO het antwoord op de vraag:
is "Soms kan het."