2012-01-19 6 views
10

मैं एमएस एसक्यूएल सर्वर 2008 में ISNULL का उपयोग कर रहा हूं, क्योंकि मेरी तालिका बहुत बड़ी है, चाहे ISNULL का उपयोग प्रदर्शन के लिए कुछ भी हो सकता है?क्या SQL सर्वर में ISNULL() का उपयोग करते समय कोई प्रदर्शन समस्या है?

अग्रिम

+4

क्या आप परीक्षण और देख नहीं सकते? –

+1

कई चीजों पर निर्भर करता है, जैसा कि पहले भी है। आप इसका उपयोग कैसे करते हैं, जहां आप इसका उपयोग करते हैं, आपकी क्वेरी क्या है। अधिक जानकारी मदद कर सकता है। – Paddy

+0

@SergioTulentsev मैं एक एन्हांसमेंट प्रोजेक्ट पर काम कर रहा हूं। तो हमने tbls के लिए कुछ नए colomns जोड़ा है। वह शून्य होगा। विकास के लिए उपलब्ध डेटा केवल कुछ ही है। उत्पादन डेटाबेस बहुत बड़ा है। मैं इसका उपयोग नहीं कर सकता। – kbvishnu

उत्तर

8

आप इसे उपयोग करने के लिए की जरूरत है धन्यवाद, तो IsNull और COALESCE या मामले की तरह विकल्प के बीच कोई मतभेद मामूली हैं। इसके बारे में चिंता न करें

किसी भी अंतर से डेटाटाइप कैसे प्रबंधित किए जाते हैं। COALESCE/CASE अंतर्निहित डेटा प्रकार रूपांतरण जोड़ सकते हैं जबकि ISNULL के पास सरल नियम हैं।

संपादित करें का चयन करें सूची में

IsNull NULLS को दबाने के लिए तुच्छ है। मुख्य कार्य पंक्तियों और डेटा को संसाधित करने में किया जाएगा। एक अतिरिक्त ISNULL मापनीय नहीं होगा: optimise prematurely

+0

क्या आप टिप्पणियां देख सकते हैं – kbvishnu

+1

इस पोस्ट पर एक और उत्तर के अनुसार, ISNULL फ़ंक्शन में काफी भिन्न प्रदर्शन प्रोफ़ाइल है जब एक WHERE या जॉइन क्लॉज में उपयोग किया जाता है तो एक चयन बनाम में उपयोग किया जाता है। मेरा अनुभव यह मामला होने की पुष्टि करता है। –

+0

@ डेविड एल्पर सहमत हैं। – gbn

9

हां यह कर सकता है। बेहतर बनाने के लिए

(Field = @x OR @x IS NULL) 

क्वेरी (यदि संभव हो) को फिर से लिखने की वजह से कुछ मामलों में फ़ंक्शन का उपयोग आंकड़ों का उपयोग करने के लिए अनुकूलक से रोकता है और कभी कभी अंतर्निहित डेटाप्रकार रूपांतरण

+0

का दुरुपयोग करना आसान है, क्या आप सी डी टिप्पणियां – kbvishnu

+0

मेरी क्वेरी कर सकते हैं: - tbl से oldcol, isnull (newcol, 0) 'a' चुनें। तो यहां मैं ISNULL का उपयोग कर रहा हूँ। क्या आप अपनी क्वेरी के आधार पर थोड़ा सा समझा सकते हैं। धन्यवाद – kbvishnu

+2

आपके मामले में ISNULL का उपयोग करने का प्रभाव नगण्य –

0

मजबूर अनुकूलक है पहले ही उल्लेख यह किया गया है के रूप में यह निर्भर करता है आपकी क्वेरी में आप इसका उपयोग कैसे कर रहे हैं। हो सकता है कि आप अपनी क्वेरी में इसका उपयोग करने के तरीके को दिखाना चाहें। (() और इसके बिना IsNull के साथ) What makes a SQL statement sargable?

0

यह आप इसे कैसे उपयोग कर रहे हैं पर निर्भर करता है, लेकिन आप दोनों ही मामलों में can build execution plans और परिणामों की तुलना -

इसके अलावा, मैं आप इस पर जाने के लिए सिफारिश करेंगे।

35

आईएसएनयूएलएल() चयन-खंड में प्रदर्शन पर लचीला प्रभाव डालता है। दूसरी तरफ जहां-खंड में प्रदर्शन पर इसका बहुत बड़ा प्रभाव हो सकता है, क्योंकि यह उस कॉलम पर एक इंडेक्स का उपयोग करने के लिए अनुकूलक को रोकता है।

where isnull(col1, 0) = 0 -- unable to use index, because every 
          -- row has to be evaluated 

where col1 = isnull(@myVar, 0) -- index will be used, since isnull(@myVar, 0) 
           -- returns the same static value for every row and 
           -- not every row has to be evaluated by the function. 

तो, जब isnull का उपयोग कर() एक जहां-खंड में, का मूल्यांकन करता है, तो यह एक सूचकांक का उपयोग करने से क्वेरी अनुकूलक से बचाता है। यदि ऐसा है, तो परिणाम के साथ एक गणना कॉलम बनाने पर विचार करें यदि isnull (col1, 0) और गणना वाले कॉलम को इंडेक्स करें और इसे अपने कहां-खंड में उपयोग करें।

+0

नोट करें कि ये दो स्थितियां एक ही परिणाम नहीं देती हैं। – Atario

1

क्लॉज में isNull का उपयोग करने से बचें। This article देखें।

+0

अरे वहाँ - इस प्रश्न में पहले से ही एक स्वीकार्य उत्तर है। यह अच्छी जानकारी है, लेकिन एक टिप्पणी के रूप में बेहतर होगा :) – landons

+0

मुझे वह लेख नहीं मिला है। यह पहले से ही नग्न कॉलम को देख रहा है। Isnull (@someVar, 0) महंगा नहीं होना चाहिए। Isnull (कुछ कॉलम, 0) महंगा हो सकता है अगर यह सूचकांक का उपयोग नहीं किया जाता है। –

+0

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/18 9 66014) – derloopkat

1

हाँ वहाँ एक प्रदर्शन मुद्दा afaik, एसक्यूएल सर्वर स्टूडियो 2012

समस्या काफी स्पष्ट है जब मैं OVER के साथ संयोजन में इस्तेमाल किया ISNULL में है। ऑप्टिमाइज़ करने के बाद (यानी उप-क्वेरी में ISNULL डालने पर मैं OVER पर उपयोग कर रहा हूं) रन टाइम (अनुमानित) 25.2 घंटे से 102 सेकंड तक घटा दिया गया है।

मेरा अनुमान है कि ISNULL ठीक है जब आप इसे पूरे कॉलम पर चलाते हैं (उदाहरण के लिए, एक सादे-ओएल 'SELECT में)। लेकिन जब आप OVER के साथ इसे चलाते हैं तो इसे हर बार नया कहा जाता है, इस प्रकार प्रदर्शन को खींचते हैं।

आगे ड्रिल करने के लिए तैयार नहीं है। बस इसे दूसरों के संदर्भ के लिए यहां डालें।

संबंधित मुद्दे