Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में COUNT () बनाम COUNT_BIG ():क्या अंतर है?

SQL सर्वर में, COUNT_BIG() फ़ंक्शन और COUNT() अनिवार्य रूप से वही काम करें:समूह में मिली वस्तुओं की संख्या लौटाएं। मूल रूप से, आप इन फ़ंक्शंस का उपयोग यह पता लगाने के लिए कर सकते हैं कि किसी तालिका या परिणाम सेट में कितनी पंक्तियाँ हैं।

कई मामलों में, आप जो भी पसंद करते हैं उसे चुनने में सक्षम होंगे। हालाँकि, इन दो कार्यों के बीच एक अंतर है जो आपको एक दूसरे का उपयोग करने के लिए निर्देशित कर सकता है।

अंतर यह है कि COUNT() अपना परिणाम int . के रूप में देता है , जबकि COUNT_BIG() अपना परिणाम बिगिंट . के रूप में लौटाता है .

दूसरे शब्दों में, आपको COUNT_BIG() . का उपयोग करना होगा यदि आप इसके परिणाम 2,147,483,647 से बड़े होने की उम्मीद करते हैं (अर्थात यदि क्वेरी 2,147,483,647 पंक्तियों से अधिक लौटाती है)।

उदाहरण 1 - जब COUNT() ठीक हो

यहां एक बुनियादी उदाहरण दिया गया है जो एक परिदृश्य दिखा रहा है जहां दोनों COUNT() और COUNT_BIG() इस्तेमाल किया जा सकता है:

USE WideWorldImportersDW;
SELECT 
  COUNT(*) AS 'COUNT',
  COUNT_BIG(*) AS 'COUNT_BIG' 
FROM Fact.[Order];

परिणाम:

+---------+-------------+
| COUNT   | COUNT_BIG   |
|---------+-------------|
| 231412  | 231412      |
+---------+-------------+

हम देख सकते हैं कि Fact.[Order] . में 231412 पंक्तियां हैं टेबल।

इस मामले में, दोनों फ़ंक्शन इसे संभाल सकते हैं, क्योंकि पंक्तियों की संख्या इतनी छोटी है कि इसे int में संग्रहीत किया जा सकता है। साथ ही एक बिगिंट .

हालांकि, यदि परिणाम इतना बड़ा था कि एक int इसे संग्रहीत नहीं कर सके, तब हम केवल COUNT_BIG() . का उपयोग कर पाएंगे ।

उदाहरण 2 - जब COUNT_BIG() आवश्यक हो

यहां एक उदाहरण दिया गया है जहां आपको COUNT_BIG() का उपयोग करने की आवश्यकता होगी ।

SELECT COUNT_BIG(*) AS 'Row Count' 
FROM ReallyBigTable;

परिणाम:

+-----------------+
| Row Count       |
|-----------------|
| 9147483648      |
+-----------------+

इस मामले में, पंक्तियों की संख्या इतनी बड़ी है कि एक int इसे संभालने में सक्षम नहीं होगा। सौभाग्य से हम उपयोग कर सकते हैं COUNT_BIG() , क्योंकि यह अपना परिणाम बिगिंट . के रूप में देता है ।

दोनों प्रकार्यों के डेटा प्रकार की जांच करना

जब हम पिछले उदाहरणों को देखते हैं, तो हम वास्तव में डेटा प्रकार का नाम नहीं देख सकते हैं। हम केवल यह मान सकते हैं कि COUNT() अपने परिणामों को int . के रूप में लौटाता है और COUNT_BIG() बिगिन्ट . का उपयोग करता है क्योंकि Microsoft दस्तावेज़ यही कहता है (हालाँकि हम जानते हैं कि दूसरा उदाहरण int नहीं हो सकता है। क्योंकि int . के लिए मान बहुत बड़ा है )

हम sp_describe_first_result_set . का उपयोग कर सकते हैं इन कार्यों में से प्रत्येक के रिटर्न डेटा प्रकार की जांच करने के लिए संग्रहीत प्रक्रिया।

COUNT() के लिए डेटा प्रकार जांचें

EXEC sp_describe_first_result_set N'SELECT COUNT(*) FROM Fact.[Order]', null, 0;

परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):

is_hidden                    | 0
column_ordinal               | 1
name                         | NULL
is_nullable                  | 1
system_type_id               | 56
system_type_name             | int
max_length                   | 4
precision                    | 10
scale                        | 0
collation_name               | NULL
user_type_id                 | NULL
user_type_database           | NULL
user_type_schema             | NULL
user_type_name               | NULL
assembly_qualified_type_name | NULL
xml_collection_id            | NULL
xml_collection_database      | NULL
xml_collection_schema        | NULL
xml_collection_name          | NULL
is_xml_document              | 0
is_case_sensitive            | 0
is_fixed_length_clr_type     | 0
source_server                | NULL
source_database              | NULL
source_schema                | NULL
source_table                 | NULL
source_column                | NULL
is_identity_column           | 0
is_part_of_unique_key        | NULL
is_updateable                | 0
is_computed_column           | 0
is_sparse_column_set         | 0
ordinal_in_order_by_list     | NULL
order_by_is_descending       | NULL
order_by_list_length         | NULL
tds_type_id                  | 38
tds_length                   | 4
tds_collation_id             | NULL
tds_collation_sort_id        | NULL

हां, ऐसी बहुत सी जानकारी है जिसकी हमें आवश्यकता नहीं है, लेकिन यदि आप system_type_name को देखें तो कॉलम, आप देखेंगे कि इसका मान int . है . यह हमें बताता है कि हमारी क्वेरी ने अपने परिणामों को int . के रूप में लौटा दिया है , जैसा सोचा था। आप यह भी देख सकते हैं कि max_length और परिशुद्धता मान int . के अनुरूप हैं डेटा प्रकार।

COUNT_BIG() के लिए डेटा प्रकार जांचें

इस उदाहरण के लिए, हमें केवल COUNT(*) . को बदलना होगा COUNT_BIG(*) . के साथ :

EXEC sp_describe_first_result_set N'SELECT COUNT_BIG(*) FROM Fact.[Order]', null, 0;

परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):

is_hidden                    | 0
column_ordinal               | 1
name                         | NULL
is_nullable                  | 1
system_type_id               | 127
system_type_name             | bigint
max_length                   | 8
precision                    | 19
scale                        | 0
collation_name               | NULL
user_type_id                 | NULL
user_type_database           | NULL
user_type_schema             | NULL
user_type_name               | NULL
assembly_qualified_type_name | NULL
xml_collection_id            | NULL
xml_collection_database      | NULL
xml_collection_schema        | NULL
xml_collection_name          | NULL
is_xml_document              | 0
is_case_sensitive            | 0
is_fixed_length_clr_type     | 0
source_server                | NULL
source_database              | NULL
source_schema                | NULL
source_table                 | NULL
source_column                | NULL
is_identity_column           | 0
is_part_of_unique_key        | NULL
is_updateable                | 0
is_computed_column           | 0
is_sparse_column_set         | 0
ordinal_in_order_by_list     | NULL
order_by_is_descending       | NULL
order_by_list_length         | NULL
tds_type_id                  | 38
tds_length                   | 8
tds_collation_id             | NULL
tds_collation_sort_id        | NULL

इस बार हम देख सकते हैं कि system_type_name बड़ा है . यह हमें बताता है कि हमारा COUNT_BIG() query ने अपने परिणाम बिगिंट . के रूप में लौटाए , जैसा सोचा था। max_length और परिशुद्धता मान बिगिन्ट . के अनुरूप भी हैं डेटा प्रकार।

वैसे, उपरोक्त करने का एक तेज़ तरीका संग्रहीत कार्यविधि को कॉल करते समय दोनों कार्यों को क्वेरी में संयोजित करना है।

इस तरह:

EXEC sp_describe_first_result_set N'SELECT COUNT(*), COUNT_BIG(*) FROM Fact.[Order]', null, 0;

यह दो पंक्तियों को आउटपुट करेगा, SELECT . में प्रत्येक फ़ंक्शन के लिए एक बयान।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कैसे ठीक करें "अमान्य वस्तु का नाम 'OPENJSON'।" SQL सर्वर में

  2. कौन अधिक प्रदर्शनकारी हैं, सीटीई या अस्थायी टेबल?

  3. निर्यात संग्रहीत कार्यविधि परिणाम SSMS में Excel में सेट किया गया है

  4. SQL सर्वर में तालिका बनाने के लिए कथन बनाएँ का उपयोग करें - SQL सर्वर / T- SQL ट्यूटोरियल भाग 34

  5. SQL सर्वर हिस्टोग्राम मोटे संरेखण का उपयोग करके अनुमान में शामिल हों