आइए इन दो बयानों की जांच करें:
IF (CONDITION 1) OR (CONDITION 2)
...
IF (CONDITION 3) AND (CONDITION 4)
...
यदि CONDITION 1
है TRUE
, CONDITION 2
तो जाँच की जाएगी ?
यदि CONDITION 3
है FALSE
, CONDITION 4
तो जाँच की जाएगी ?
शर्तों के बारे में क्या WHERE
: क्या SQL सर्वर इंजन एक WHERE
क्लॉज में सभी स्थितियों का अनुकूलन करता है ? क्या प्रोग्रामर को सही क्रम में स्थितियां सुनिश्चित करनी चाहिए कि SQL सर्वर ऑप्टिमाइज़र इसे सही तरीके से हल करे ?
जोड़े गए:
जैक को लिंक के लिए धन्यवाद, टी-एसक्यूएल कोड से आश्चर्य:
IF 1/0 = 1 OR 1 = 1
SELECT 'True' AS result
ELSE
SELECT 'False' AS result
IF 1/0 = 1 AND 1 = 0
SELECT 'True' AS result
ELSE
SELECT 'False' AS result
इस मामले में शून्य अपवाद द्वारा एक विभाजन नहीं बढ़ा है ।
निष्कर्ष:
यदि C ++ / C # / VB में शॉर्ट-सर्कुलेटिंग है तो SQL सर्वर में क्यों नहीं हो सकता है?
इसका सही उत्तर देने के लिए आइए एक नज़र डालते हैं कि दोनों ही स्थितियों के साथ कैसे काम करते हैं। C ++ / C # / VB सभी में कोड निष्पादन को गति देने के लिए भाषा विशिष्टताओं में परिभाषित लघु परिच्छेद हैं। एन या स्थितियों के मूल्यांकन में परेशान क्यों करें जब पहले वाला पहले से ही सच है या एम एंड की स्थिति जब पहला वाला पहले से ही झूठ है।
हम डेवलपर्स के रूप में जानते हैं कि SQL सर्वर अलग तरह से काम करता है। यह लागत आधारित प्रणाली है। हमारे क्वेरी के लिए इष्टतम निष्पादन योजना प्राप्त करने के लिए क्वेरी प्रोसेसर को हर उस स्थिति का मूल्यांकन करना होगा और इसे एक लागत आवंटित करना होगा। इन लागतों का मूल्यांकन एक संपूर्ण सीमा के रूप में किया जाता है जो कि एक अच्छी योजना के लिए परिभाषित थ्रेशोल्ड SQL सर्वर से कम होनी चाहिए। यदि लागत निर्धारित सीमा से कम है, तो योजना का उपयोग किया जाता है, यदि पूरी प्रक्रिया को फिर से हालत लागतों के एक अलग मिश्रण के साथ दोहराया नहीं जाता है। यहाँ लागत या तो एक स्कैन है या एक मर्ज या मर्ज ज्वाइन या हैश जॉइन वगैरह ... इसके कारण C-/ C # / VB में उपलब्ध शॉर्ट-सर्कुलेटिंग बस संभव नहीं है। आप सोच सकते हैं कि एक स्तंभ पर सूचकांक के उपयोग को कम परिवृत्त के रूप में गिना जाता है, लेकिन ऐसा नहीं है। यह केवल उस सूचकांक के उपयोग को मजबूर करता है और इसके साथ ही संभावित निष्पादन योजनाओं की सूची को छोटा करता है। प्रणाली अभी भी लागत आधारित है।
एक डेवलपर के रूप में आपको पता होना चाहिए कि SQL सर्वर शॉर्ट-सर्कुलेटिंग नहीं करता है जैसे कि अन्य प्रोग्रामिंग भाषाओं में किया जाता है और ऐसा कुछ भी नहीं है जिसे आप इसे करने के लिए मजबूर कर सकें।