जब हम निष्पादित करते हैं तो select count(*) from table_name
यह पंक्तियों की संख्या लौटाता है।
क्या करता count(1)
है? 1
यहाँ क्या दर्शाता है? क्या यह वैसा ही है count(*)
(जैसा कि यह निष्पादन पर समान परिणाम देता है)?
जब हम निष्पादित करते हैं तो select count(*) from table_name
यह पंक्तियों की संख्या लौटाता है।
क्या करता count(1)
है? 1
यहाँ क्या दर्शाता है? क्या यह वैसा ही है count(*)
(जैसा कि यह निष्पादन पर समान परिणाम देता है)?
जवाबों:
COUNT फ़ंक्शन का पैरामीटर एक अभिव्यक्ति है जिसका मूल्यांकन प्रत्येक पंक्ति के लिए किया जाना है। COUNT फ़ंक्शन उन पंक्तियों की संख्या लौटाता है जिनके लिए अभिव्यक्ति एक गैर-शून्य मान का मूल्यांकन करती है। (* एक विशेष अभिव्यक्ति है जिसका मूल्यांकन नहीं किया गया है, यह केवल पंक्तियों की संख्या लौटाता है।)
अभिव्यक्ति के लिए दो अतिरिक्त संशोधक हैं: ALL और DISTINCT। ये निर्धारित करते हैं कि क्या डुप्लिकेट को छोड़ दिया गया है। चूंकि सभी डिफ़ॉल्ट है, आपका उदाहरण गिनती (सभी 1) के समान है, जिसका अर्थ है कि डुप्लिकेट को बनाए रखा जाता है।
चूंकि अभिव्यक्ति "1" प्रत्येक पंक्ति के लिए गैर-शून्य का मूल्यांकन करती है, और चूंकि आप डुप्लिकेट को नहीं निकाल रहे हैं, इसलिए COUNT (1) को हमेशा COUNT (*) के समान संख्या वापस करनी चाहिए।
यहाँ है एक लिंक दिया गया है जो आपके सवालों के जवाब देने में मदद करेगा। संक्षेप में:
काउंट (*) इसे लिखने का सही तरीका है और काउंट (1) बीई काउंट के लिए ऑप्टिमाइज़ किया गया है (*) आंतरिक रूप से -
a) उन पंक्तियों को गिनें जहाँ 1 n n से कम कुशल नहीं है
) पंक्तियों को गिनें
गणना (*) और गिनती (1) के बीच का अंतर?
count (*) का अर्थ है कि यह सभी रिकॉर्डों को गिनेगा और प्रत्येक सेल BUT होगा
गिनती (1) का अर्थ है कि यह मान 1 के साथ एक छद्म स्तंभ जोड़ देगा और सभी रिकॉर्डों की गिनती लौटाएगा
यह बीच के अंतर के समान है
SELECT * FROM table_name and SELECT 1 FROM table_name.
यदि तुम करो
SELECT 1 FROM table_name
यह आपको तालिका में प्रत्येक पंक्ति के लिए नंबर 1 देगा। तो हाँ count(*)
और count(1)
जैसा होगा वैसा ही परिणाम देगा count(8)
या देगाcount(column_name)
इसमें कोई फर्क नही है।
COUNT(1)
मूल रूप से प्रत्येक पंक्ति के लिए केवल एक निरंतर मान 1 कॉलम गिना जा रहा है। जैसा कि यहां के अन्य उपयोगकर्ताओं ने कहा है, यह COUNT(0)
या के समान है COUNT(42)
। कोई भी गैर-NULL
मूल्य पर्याप्त होगा।
http://asktom.oracle.com/pls/asktom/f?p=100:11:2603224624843292::::P11_QUESTION_ID:1156151916789
ओरेकल ऑप्टिमाइज़र ने स्पष्ट रूप से इसमें बग्स का उपयोग किया था, जिसके कारण गिनती प्रभावित हुई थी कि आपने किस कॉलम को उठाया था और क्या यह एक सूचकांक में था, इसलिए COUNT (1) सम्मेलन अस्तित्व में आया।
SELECT COUNT(1) from <table name>
के रूप में सटीक एक ही काम करना चाहिए
SELECT COUNT(*) from <table name>
SELECT COUNT(*)
कुछ डेटाबेस पर बेहतर प्रदर्शन करने के कुछ कारण हो सकते हैं या अभी भी हो सकते हैं , लेकिन मुझे लगता है कि डीबी में एक बग होगा।
SELECT COUNT(col_name) from <table name>
हालांकि इसका एक अलग अर्थ है, क्योंकि यह दिए गए कॉलम के लिए केवल एक अशक्त मान वाली पंक्तियों को गिनता है।
oracle में मेरा मानना है कि ये बिल्कुल एक ही अर्थ है
आप इस तरह का परीक्षण कर सकते हैं:
create table test1(
id number,
name varchar2(20)
);
insert into test1 values (1,'abc');
insert into test1 values (1,'abc');
select * from test1;
select count(*) from test1;
select count(1) from test1;
select count(ALL 1) from test1;
select count(DISTINCT 1) from test1;
आप जो पूछते हैं, उसके आधार पर, कुछ लोग रिपोर्ट करते हैं कि निष्पादन select count(1) from random_table;
तेजी से चलता हैselect count(*) from random_table
। दूसरों का दावा है कि वे बिल्कुल समान हैं।
यह लिंक दावा करता है कि 2 के बीच की गति का अंतर एक पूर्ण टेबल स्कैन बनाम फास्ट पूर्ण स्कैन के कारण है।