माइकल एरिकसन bellow क्यों पहली क्वेरी तेज है एक अच्छा व्याख्या है। तो यह तालिका में सभी पंक्तियों की गणना करने के बजाय एक पंक्ति की उपस्थिति की तलाश में जाता है।
अन्य दो प्रश्नों के लिए, SQL सर्वर निम्न नियम का उपयोग करेगा। SELECT COUNT(*)
जैसी क्वेरी करने के लिए, SQL सर्वर पंक्तियों की गणना करने के लिए संकीर्ण गैर-क्लस्टर अनुक्रमणिका का उपयोग करेगा। यदि तालिका में गैर-क्लस्टर इंडेक्स नहीं है, तो उसे तालिका को स्कैन करना होगा।
इसके अलावा, आप निम्न क्वेरी (इस साइट Get Row Counts Fast! से उधार)
--SQL Server 2005/2008
SELECT OBJECT_NAME(i.id) [Table_Name], i.rowcnt [Row_Count]
FROM sys.sysindexes i WITH (NOLOCK)
WHERE i.indid in (0,1)
ORDER BY i.rowcnt desc
--SQL Server 2000
SELECT OBJECT_NAME(i.id) [Table_Name], i.rows [Row_Count]
FROM sysindexes i (NOLOCK)
WHERE i.indid in (0,1)
ORDER BY i.rows desc
यह sysindexes प्रणाली तालिका का उपयोग करता का उपयोग कर भी तेजी से अपनी गिनती प्राप्त कर सकते हैं अपनी मेज एक क्लस्टर सूचकांक है। अधिक जानकारी आप यहाँ पा सकते हैं SQL Server 2000, SQL Server 2005, SQL Server 2008, SQL Server 2012
यहाँ एक और समाधान के साथ एक और लिंक Why is my SELECT COUNT(*) running so slow? है। यह तकनीक दिखाता है कि जब आप तालिका पर राइट क्लिक करते हैं और गुणों का चयन करते हैं तो माइक्रोसॉफ्ट पंक्तियों की संख्या को त्वरित रूप से प्रदर्शित करने के लिए उपयोग करता है।
select sum (spart.rows)
from sys.partitions spart
where spart.object_id = object_id(’YourTable’)
and spart.index_id < 2
आपको यह पता होना चाहिए कि यह कितनी जल्दी है, इससे कोई फर्क नहीं पड़ता कि आपके पास कितनी टेबल हैं।
यदि आप SQL 2000 का उपयोग कर रहे हैं तो भी आप संख्या प्राप्त करने के लिए sysindexes तालिका का उपयोग कर सकते हैं।
select max(ROWS)
from sysindexes
where id = object_id(’YourTable’)
यह संख्या थोड़ा कितनी बार एसक्यूएल अद्यतन करता sysindexes तालिका के आधार पर बंद किया जा सकता है, लेकिन यह आमतौर corrent (या कम से कम इतने पास) है।
आम तौर पर चयन बोल " तालिका से गिनती (*) "- बड़े डेटा के साथ बड़ी समस्याएं हो सकती हैं;) –