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

एसक्यूएल सर्वर 2005 में गणना (*) बनाम गणना (आईडी)

थिलो ने अंतर को ठीक किया... COUNT( column_name ) COUNT( * ) . से कम संख्या लौटा सकता है अगर column_name NULL हो सकता है ।

हालांकि, अगर मैं आपके प्रश्न का उत्तर देने में थोड़ा अलग कोण ले सकता हूं, क्योंकि आप प्रदर्शन पर ध्यान केंद्रित कर रहे हैं।

सबसे पहले, ध्यान दें कि SELECT COUNT(*) FROM table; संभावित रूप से लेखकों को अवरुद्ध कर देगा, और इसे अन्य पाठकों/लेखकों द्वारा भी अवरुद्ध कर दिया जाएगा जब तक कि आपने अलगाव स्तर को नहीं बदला है (घुटने का झटका WITH (NOLOCK) हो जाता है) लेकिन मैं देख रहा हूं कि बड़ी संख्या में लोग अंततः आरसीएसआई में विश्वास करने लगे हैं)। जिसका अर्थ है कि जब आप अपनी "सटीक" गिनती प्राप्त करने के लिए डेटा पढ़ रहे हैं, तो ये सभी डीएमएल अनुरोध जमा हो रहे हैं, और जब आपने अंततः अपने सभी ताले जारी किए हैं, तो बाढ़ के द्वार खुलते हैं, डालने/अपडेट/डिलीट का एक गुच्छा गतिविधि होती है, और आपकी "सटीक" गणना हो जाती है।

यदि आपको पूरी तरह से लेन-देन के अनुरूप और सटीक पंक्ति गणना की आवश्यकता है (भले ही यह केवल मिलीसेकंड की संख्या के लिए मान्य हो, जो आपको संख्या वापस करने में लगती है), तो SELECT COUNT( * ) आपकी एकमात्र पसंद है।

दूसरी ओर, यदि आप 99.9% सटीक बॉलपार्क प्राप्त करने का प्रयास कर रहे हैं, तो आप इस तरह की एक क्वेरी के साथ बहुत बेहतर हैं:

SELECT row_count = SUM(row_count)
  FROM sys.dm_db_partition_stats
  WHERE [object_id] = OBJECT_ID('dbo.Table')
  AND index_id IN (0,1);

(SUM क्या विभाजित तालिकाओं के लिए खाता है - यदि आप तालिका विभाजन का उपयोग नहीं कर रहे हैं, तो आप इसे छोड़ सकते हैं।)

यह DMV उन पंक्तियों के अपवाद के साथ तालिकाओं के लिए सटीक पंक्ति गणना रखता है जो वर्तमान में लेन-देन में भाग ले रही हैं - और वही लेन-देन वही हैं जो आपके SELECT COUNT क्वेरी प्रतीक्षा करें (और अंततः इसे पढ़ने के लिए आपके पास समय से पहले इसे गलत बना दें)। लेकिन अन्यथा यह आपके द्वारा प्रस्तावित क्वेरी की तुलना में बहुत तेज़ उत्तर देगा, और WITH (NOLOCK) का उपयोग करने से कम सटीक नहीं होगा। ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. दो डेटाबेस के बीच विदेशी कुंजी संबंध जोड़ें

  2. Azure डेटा स्टूडियो के साथ SQL सर्वर एजेंट कार्य इतिहास देखें

  3. SQL सर्वर - वर्तमान उपयोगकर्ता नाम

  4. ExecuteReader:कनेक्शन गुण प्रारंभ नहीं किया गया है

  5. SQL सर्वर तालिका में कॉलम पर शून्य बाधा कैसे बनाएं - SQL सर्वर / टी-एसक्यूएल ट्यूटोरियल भाग 51