जैसा कि मार्क ने बताया, आप प्रदर्शन अंतर खोजने के लिए कड़ी मेहनत करने जा रहे हैं; मुझे लगता है कि अन्य कारक अधिक महत्वपूर्ण होंगे। मेरे लिए, मैं हमेशा COALESCE का उपयोग करता हूं , और इसमें से अधिकांश का उल्लेख आप या मार्क पहले ही कर चुके हैं:
- COALESCE ANSI मानक है। अगर मैं अपना कोड पोर्ट करने जा रहा हूं तो मुझे एक चिंता की बात है। मेरे लिए व्यक्तिगत रूप से यह उतना महत्वपूर्ण नहीं है, क्योंकि मुझे पता है कि सेलको की कक्षा की दुनिया के बाहर ऐसे बंदरगाह वास्तव में कितने भिन्न हैं, लेकिन कुछ लोगों के लिए यह एक लाभ है।
- पठनीयता के बारे में आपने जो कहा है, उसके विपरीत, मुझे लगता है कि ISNULL को पढ़ना मुश्किल हो सकता है विशेष रूप से अन्य भाषाओं या प्लेटफार्मों से आने वाले उपयोगकर्ताओं के लिए जहां ISNULL एक बूलियन देता है (जो SQL सर्वर में मौजूद नहीं है)। दी गई, वर्तनी कठिन है, लेकिन कम से कम यह गलत धारणाओं को जन्म नहीं देता है।
- COALESCE बहुत अधिक लचीला है, जैसा कि मैं कह सकता हूं कि COALESCE (a, b, c, d) जबकि ISNULL के साथ मुझे एक ही चीज़ प्राप्त करने के लिए बहुत सारे नेस्टिंग करने होंगे।
आपको यह भी सुनिश्चित करना चाहिए कि आप इस बात से अवगत हैं कि यदि आप विभिन्न प्रकार के डेटा प्रकारों / पूर्वाभासों आदि के साथ उपयोग कर रहे हैं, तो दो प्रकारों का उपयोग करके डेटा प्रकार की पूर्वता को कैसे नियंत्रित किया जाता है।
ध्यान दें
एक अपवाद है। इन्हें SQL सर्वर के वर्तमान संस्करणों में अलग तरीके से संभाला जाता है:
SELECT COALESCE((SELECT some_aggregate_query),0);
SELECT ISNULL((SELECT some_aggregate_query),0);
COALESCE
संस्करण वास्तव में निष्पादित करेंगे some_aggregate_query
(मूल्य की जांच करने के लिए एक बार, और एक बार यह वापस जाने के लिए जब गैर शून्य) दो बार है, जबकि ISNULL
केवल सबक्वेरी एक बार निष्पादित करेंगे। मैं यहां कुछ अन्य मतभेदों के बारे में बात करता हूं:
COALESCE
दो बार मूल्यांकन में मिलती है।