जवाबों:
इसका अर्थ है कि पाठ्यक्रम COUNT(any_non_null_column)
को वैसा ही दिया जाएगा COUNT(*)
क्योंकि मतभेद पैदा करने के लिए कोई पूर्ण मान नहीं हैं।
आम तौर पर, COUNT(*)
बेहतर होना चाहिए क्योंकि किसी भी सूचकांक का उपयोग किया जा सकता है क्योंकि COUNT(column_or_expression)
अनुक्रमित या SARGable नहीं हो सकता है
से एएनएसआई-92 ( "के लिए देखो Scalar expressions 125
")
मामला:
a) यदि COUNT (*) निर्दिष्ट है, तो परिणाम T की कार्डिनैलिटी है।
b) अन्यथा, TX एकल-स्तंभ तालिका है जो T की प्रत्येक पंक्ति में <मान अभिव्यक्ति> को लागू करने और अशक्त मानों को समाप्त करने का परिणाम है। यदि एक या एक से अधिक अशक्त मानों को समाप्त कर दिया जाता है, तो एक पूरा होने की स्थिति उठाई जाती है: चेतावनी- शून्य मान सेट फ़ंक्शन में समाप्त हो जाता है।
SQL सर्वर और Sybase पर भी कम से कम वही नियम लागू होते हैं
नोट: COUNT (1) COUNT (*) के समान है क्योंकि 1 एक गैर-अशक्त अभिव्यक्ति है।
COUNT(*)
, COUNT(<constant>)
और COUNT(<column name>)
यह कि तीनों के साथ उपसर्ग किया जा सकता है ALL
या DISTINCT
( ALL
यदि छोड़ा गया है तो डिफ़ॉल्ट रूप से )। मैं सोच रहा हूँ कि आप कहाँ कहते हैं कि किस अभिव्यक्ति का उपयोग किया जा सकता है _or_expression
?
COUNT(1)
एक बेकार उदाहरण के रूप में, यह उसी के समान है COUNT(*)
। COUNT(CASE WHEN a>b THEN 1 END)
एक उदाहरण के रूप में जहां पंक्तियों की गिनती होती है जहां a> b।
ओरेकल के किसी भी हाल के (यानी 8.x + ) संस्करण में वे एक ही काम करते हैं । दूसरे शब्दों में केवल अंतर शब्दार्थ है:
select count(*) from any_table
आसानी से पठनीय और स्पष्ट है कि आप क्या करने की कोशिश कर रहे हैं, और
select count(any_non_null_column) from any_table
क्योंकि पढ़ना मुश्किल है
any_non_null_column
वास्तव में इसे लागू किया गया हैnot null
संक्षेप में, का उपयोग करेंcount(*)
हाल के संस्करण में वास्तव में गिनती (*) और गिनती ( कोई शून्य स्तंभ नहीं ) के बीच कोई अंतर नहीं है, अशक्त न होने पर जोर देने के साथ :-) क्या संयोगवश उस विषय को एक ब्लॉग पोस्ट के साथ कवर किया गया है: क्या गिनती (कॉल) गिनती से बेहतर है (*)?
पुस्तक में Oracle8i सर्टिफिकेट प्रोफेशनल डीबीए प्रमाणन परीक्षा गाइड (आई +००७२१३०६०१) , पृष्ठ 78 COUNT (1) तेजी से है कि वास्तव में चला जाएगा कहते हैं COUNT (*) क्योंकि कुछ तंत्र प्रत्येक स्तंभ के nullability के लिए डेटा शब्दकोश की जाँच के लिए खेलने में कहा जाता है (या COUNT (*) का उपयोग करते समय कम से कम पहला स्तंभ गैर-अशक्तता के साथ ) । COUNT (1) उन तंत्रों को बायपास करता है।
MySQL tblname पर 'SELECT COUNT (1) के लिए धोखा देता है?' तालिका गणना के लिए तालिका शीर्षलेख पढ़कर MyISAM तालिकाओं पर। InnoDB हर बार मायने रखता है।
यह जांचने के लिए कि क्या COUNT (1) डेटाबेस अज्ञेय तरीके से COUNT (*) से अधिक तेज़ी से चलेगा, बस निम्नलिखित चलाएं और अपने लिए चलने का समय निर्धारित करें:
SELECT COUNT(1) FROM tblname WHERE 1 = 1;
SELECT COUNT(*) FROM tblname WHERE 1 = 1;
SELECT COUNT(column-name) FROM tblname WHERE 1 = 1;
यह COUNT फ़ंक्शन को स्टोरेज इंजन या RDBMS की परवाह किए बिना समान स्तर के खेल के मैदान पर संचालित करता है।
count(*)
उपयोग किया जाता है तो ओरेकल एक अनुक्रमित नहीं-शून्य कॉलम पर एक इंडेक्स-स्कैन का उपयोग करेगा।