count(*)
और count(column_name)
, mysql में क्या अंतर है।गिनती (*) और गिनती (कॉलम_नाम), diff क्या है?
उत्तर
COUNT(*)
मायने रखता है परिणाम सेट में सभी पंक्तियों चाहतेCOUNT (ColumnName)
बेहतर है।COUNT(column_name)
केवल उन पंक्तियों की गणना करता है जहांcolumn_name
शून्य नहीं है। यह कुछ परिस्थितियों में धीमा हो सकता है भले ही कोई शून्य मान न हो क्योंकि मान को जांचना है (जब तक कॉलम शून्य नहीं हो जाता)।COUNT(1)
COUNT(*)
जैसा ही है क्योंकि 1 कभी भी पूर्ण नहीं हो सकता है।
परिणाम में अंतर को देखने के लिए आप इस छोटे प्रयोग की कोशिश कर सकते हैं:
CREATE TABLE table1 (x INT NULL);
INSERT INTO table1 (x) VALUES (1), (2), (NULL);
SELECT
COUNT(*) AS a,
COUNT(x) AS b,
COUNT(1) AS c
FROM table1;
परिणाम: यदि आपके स्तंभ शून्य अनुमति देते हैं
a b c 3 2 3
COUNT (*) परिणाम सेट में सभी पंक्तियों की गणना नहीं करता है (या ग्रुप BY का उपयोग करते हुए समूह) केवल उन पंक्तियों की गणना नहीं करता है जहां सभी कॉलम_नाम पूर्ण नहीं है – zloctb
COUNT (*)
, COUNT (ColumnName)
, COUNT (1)
के बीच कोई प्रदर्शन अंतर नहीं है।
अब, यदि आपके पास COUNT (ColumnName)
है तो डेटाबेस को यह जांचना होगा कि कॉलम में NULL
मान है, और NULL
एस को समेकित से हटा दिया गया है। तो COuNT (*)
या COUNT (1)
जब तक आप (ग्रुप द्वारा उपयोग कर या समूह) COUNT (DISTINCT ColumnName)
स्तंभ परिभाषा -ie पर निर्भर करता है - आप अलग-अलग परिणाम प्राप्त हो सकते हैं (और कुछ स्थितियों में यह गिनती (कॉलम) के साथ धीमा हो सकता है क्योंकि मार्क ने पहले ही बताया है)।
ज्यादातर मामलों में थोड़ा अंतर होता है, और COUNT(*)
या COUNT(1)
आम तौर पर पसंद किया जाता है। हालांकि, एक महत्वपूर्ण स्थिति है जहां आप COUNT(columnname)
का उपयोग करना चाहिए: बाहरी जुड़ता है।
यदि आप किसी मूल तालिका से किसी बच्चे तालिका में बाहरी शामिल हो रहे हैं, और आप उन पंक्तियों में शून्य गणना प्राप्त करना चाहते हैं जिनके पास बाल तालिका में कोई संबंधित आइटम नहीं है, तो आपको COUNT(column in child table)
का उपयोग करना होगा। जब कोई मिलान नहीं होता है, तो वह कॉलम NULL
होगा, और आपको वांछित शून्य गणना मिल जाएगी (वास्तव में, आपको NULL
मिल जाएगा, लेकिन आप इसे 0
पर IFNULL()
या COALESCE()
के साथ परिवर्तित कर सकते हैं)। यदि आप COUNT(*)
का उपयोग करते हैं, तो यह पंक्ति को मूल तालिका से गिना जाता है, इसलिए आपको 1
की गिनती मिल जाएगी।
SELECT c.name, COALESCE(COUNT(o.id), 0) AS order_count
FROM customers AS c
LEFT JOIN orders AS o ON o.customer_id = c.id
- 1. गिनती
- 2. गिनती (*)?
- 3. गिनती (अनुक्रमित कॉलम) गिनती (*) से तेज है?
- 4. एसक्यूएल विशिष्ट और गिनती
- 5. SQL क्वेरी, गिनती और
- 6. गिनती और फिर पाइथन
- 7. समूह और गिनती आइटम
- 8. LINQ और गिनती
- 9. एसक्यूएल गिनती (*) और विशिष्ट
- 10. क्या गिनती (*)% 2 = 1
- 11. के बीच अंतर: डी [गिनती] और डी [गिनती]
- 12. गिनती घटनाओं
- 13. उलटी गिनती
- 14. एसक्यूएल गिनती -
- 15. गिनती resultset
- 16. गिनती टकराव
- 17. बिट गिनती
- 18. गिनती तंत्र
- 19. अधिकतम गिनती
- 20. गिनती बैश
- 21. SPARQL क्वेरी और विशिष्ट गिनती
- 22. रेल में समूह और गिनती
- 23. मोमेंटज और उलटी गिनती टाइमर
- 24. MySQL गिनती पंक्तियों और समस्या
- 25. MySQL गिनती और समूह दिन
- 26. सी # में "गिनती ++" वापसी क्या करती है?
- 27. एंड्रॉइड उलटी गिनती
- 28. Linq आदेश गिनती
- 29. समारोह गिनती कॉल
- 30. पायथन में इटरेशन गिनती?
प्रदर्शन के अनुसार, कोई अंतर नहीं, हालांकि जब आप कॉलम नाम निर्दिष्ट करते हैं, तो आपको केवल पंक्तियों की गिनती मिलती है जहां वह क्षेत्र शून्य नहीं होता है। इसके अलावा, गिनती (कॉलमनाम) मेरी राय में बस "महसूस" बेहतर है। – Jay
@Jay: एक प्रदर्शन अंतर है। देखें: http://www.mysqlperformanceblog.com/2007/04/10/count-vs-countcol/ –