इसके लायक होने के लिए आपके पास एक बहुत ही विशिष्ट उपयोग केस है, इसलिए मैंने आपके वास्तविक प्रश्न का नमूना किसी तालिका पर मूल्य में पहले इस्तेमाल किया था जो अन्य चर के लिए स्क्रिप्ट को नियंत्रित और नियंत्रित करता था। मुझे लगता है कि कुछ औसत एक int था जैसा आपने 0 का उपयोग किया था। मेरा सुझाव यह है कि आप अपना विशिष्ट कुछवल/कुछ मामला चुनते हैं और स्वयं परीक्षण करते हैं।
declare @val int = 0;
declare @time1 Datetime2 = getdate();
declare @time2 Datetime2 = getdate();
Select @time1 = GETDATE();
while @MyCounter < 1000000
Begin
Select @val = ISNULL((SELECT TOP 1 LocationID FROM location), 0)
Select @MyCounter +=1;
END
Select @time2 = GETDATE();
Print datediff(millisecond,@time1,@time2);
Select @MyCounter = 0;
Select @time1 = GETDATE();
while @MyCounter < 1000000
Begin
Select @val = COALESCE((SELECT TOP 1 LocationID FROM Location), 0)
Select @MyCounter +=1;
END
Select @time2 = GETDATE();
Print datediff(millisecond,@time1,@time2);
परिणाम बहुत नाटकीय थे, इस्लाम के लिए 11270 और सहवास के लिए 18 9 30 थे। लूप के दूसरे टेस्ट के रूप में लूप के क्रम को उलटकर 18260 को कॉल्सलेस और 10810 के लिए इन्सनल के लिए बनाया गया। आपके विशिष्ट मामले के लिए मैं कहूंगा कि isnull स्पष्ट रूप से तेज़ है।
यह कहना नहीं है कि यह किसी भी अन्य स्थिति में बेहतर है। Int के बजाय सीधे ऊपर मान, या nvarchars या बिट्स का उपयोग करना, या एक स्तंभ जो प्राथमिक कुंजी नहीं है, या नेस्टिंग isnull बनाम को जोड़ने के लिए पैरामीटर जोड़ना चीजों को बदल सकता है।
यह केवल प्रश्न पूछता है जैसा कि पूछा गया था।
पहला लिंक ISNULL को प्राथमिकता देता है, और दूसरा लिंक बताता है कि कोलेस को प्राथमिकता दी जानी चाहिए! – AdaTheDev
कृपया लिंक देखें प्रदर्शन: ISNULL बनाम COALESCE http://sqlblog.com/blogs/adam_machanic/archive/2006/07/12/performance-isnull-vs-coalesce.aspx – amexn