2010-07-17 11 views
16

क्या सबसे अच्छा प्रदर्शन में निर्धारित करने के लिए अगर एक आइटम मौजूद हैं या विशेष रूप से यदि तालिका 700,000 से अधिक पंक्तिआइटम मौजूद है या नहीं, यह जांचने के लिए सबसे अच्छा क्या है: गणना करें (आईडी) या मौजूद (...)?

if (Select count(id) from Registeration where email='[email protected]') > 0 
    print 'Exist' 
else 
    print 'Not Exist' 

या

if Exists(Select id from Registeration where email='[email protected]') 
    print 'Exist' 
else 
    print 'Not Exist' 

उत्तर

28

मौजूद है को शामिल नहीं

  • COUNT जाएगा, हमेशा तालिका या अनुक्रमणिका को पार करें: आपने COUNT
  • EXISTS को जल्द से जल्द बंद कर दिया होगा पंक्ति

संपादित करें, इस मामले में स्पष्ट

बेशक

होने के लिए, यदि ईमेल कॉलम अद्वितीय है और अनुक्रमित यह करीब होगा।

आम तौर पर, EXISTS कम संसाधनों का उपयोग करेगा और यह भी अधिक सही होगा। आप एक पंक्ति के अस्तित्व की तलाश में हैं, न कि "शून्य से अधिक" भले ही वे एक ही

संपादित करें 2: EXISTS में, आप NULL, 1, ID, या यहां तक ​​कि 1/0 का उपयोग भी कर सकते हैं: यह नहीं है जाँच की ...

21 मई 2011 संपादित करें:

ऐसा लगता है कि इस एसक्यूएल सर्वर 2005+ में अनुकूलित किया गया था ताकि COUNT अब एक ही इस मामले में मौजूद है

+2

+1। हालांकि, सरलीकृत उदाहरण में, यदि 'ईमेल' अनुक्रमित किया गया है, तो अंतर अनावश्यक होने के लिए इतना छोटा होना चाहिए। – Toby

+0

@Toby: सच है। जैसा कि आपने पोस्ट किया था मैं संपादन कर रहा था। – gbn

4

को भी ध्यान में ले कि Count() केवल वापस लौटें जिसमें यदि आप int से अधिक कुछ डेटा गिनते हैं तो यह त्रुटि उत्पन्न करेगा

+1

हां, यदि आपके पास 2 अरब से अधिक पंक्तियां हैं, तो आपको 'count_big', या अपने आरबीएमएस समकक्ष का उपयोग करना चाहिए। – Donnie

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

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