यहां एक डेमो है 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
जानबूझकर एक सेकंड के लिए सोता है और हर बार चलने पर लॉग टेबल में एक प्रविष्टि जोड़ने का दुष्प्रभाव होता है। दो प्रश्नों को चलाते समय जो लॉग किया गया है उसके परिणाम यहां दिए गए हैं:
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
उपरोक्त से पता चलता है कि एक धीमे कार्य को अधिक बार निष्पादित किया जाता है जब यह OR
. के बाईं ओर दिखाई देता है वह स्थिति जब दूसरा ऑपरेंड हमेशा सत्य नहीं होता है।
तो आईएमओ इस सवाल का जवाब:
है "कभी-कभी यह कर सकता है।"