2010-10-14 12 views
6

की जांच करने पर पूर्ण प्रदर्शन नहीं है I इंटरनेट पर पाए गए कुछ लेख ISNULL को COALESCE के साथ तुलना करते हैं, इसलिए मुझे लगता है कि मेरा प्रश्न थोड़ा अलग है।कोलेस बनाम खाली स्ट्रिंग

मुझे आश्चर्य है कि प्रदर्शन प्रदर्शन के संदर्भ में बेहतर है?

SELECT * FROM mytable WHERE mycolumn IS NOT NULL AND mycolumn <> ''; 

या

SELECT * FROM mytable WHERE COALESCE(mycolumn,'') <> ''; 

प्रदर्शन के अलावा, किसी भी अन्य चिंताओं मैं तय करते समय इस पर विचार करना चाहिए रहे हैं?

संपादित करें:

मैं टेराडाटा का उपयोग कर रहा हूं।

उत्तर

7

इस संस्करण से थोड़ा अधिक sargable है और एक सूचकांक होने के लिए (संभावित) की अनुमति देता है

इस्तेमाल किया
SELECT * FROM mytable WHERE mycolumn IS NOT NULL AND mycolumn <> ''; 

यह

SELECT * FROM mytable WHERE mycolumn <> ''; 

कारण करने के लिए सरल किया जा सकता है कि क्यों मैं कहता हूँ "थोड़ा" और "संभावित "यह है कि गैर समानता भविष्यवाणी का मतलब यह हो सकता है कि आप वैसे भी एक पूर्ण स्कैन के साथ समाप्त हो जाते हैं।

+0

एक अनुवर्ती प्रश्न के रूप में, यदि हम जानते थे कि एक सूचकांक का उपयोग किया जाएगा, तो हम एसक्यूएल (दृश्यों के पीछे) को स्वचालित रूप से अनुकूलित करने में सक्षम हो सकते हैं और मेरे कॉलम में COALESCE (mycolumn, '') <> '' का अनुवाद नहीं कर सकते हैं I न्यूल और mycolumn <> ''। क्या मैं समझ रहा हूँ? – Russell

+0

मुझे विश्वास है कि आप पाते हैं कि एनयूएसआई का उपयोग असमानता तुलना को पूरा करने के लिए नहीं किया जा सकता है। ऑप्टिमाइज़र एनयूएसआई का उपयोग कर रहा है या नहीं, यह पुष्टि करने के लिए EXPLAIN को देखने लायक होगा। –

1

आप ANSI_NULL ON setting का उपयोग करने पर भी विचार कर सकते हैं। यह एक कॉलम पर शून्य मानों को स्पष्ट रूप से फ़िल्टर करेगा जहां आप एक खोज तर्क जारी करते हैं। ऐसा करने से आपकी क्वेरी सरल हो जाती है, मुझे यकीन नहीं है कि यह तेज़ी से बनाता है या नहीं। तर्कसंगत रूप से सिद्धांत में यह होना चाहिए, क्योंकि कम फ़िल्टर तर्कों का मूल्यांकन करने की आवश्यकता है और जहां कोई खंड नहीं है, जहां खंड को पूर्ण सूचकांक चयनशीलता सक्षम करनी चाहिए। एक उदाहरण के रूप में आप अपनी क्वेरी को फिर से कारक बना सकते हैं:

SET ANSI_NULLS ON; 
SELECT * FROM mytable WHERE NOT mycolumn = ''; 

मुझे उम्मीद है कि इससे मदद मिलती है।

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