मिकेल एरिक्सन के पास एक अच्छी व्याख्या है कि पहली क्वेरी तेज़ क्यों है:
SQL सर्वर इसे इसमें अनुकूलित करता है:if exists(select * from BookChapters)
. तो यह तालिका में सभी पंक्तियों को गिनने के बजाय एक पंक्ति की उपस्थिति की तलाश में जाता है।
अन्य दो प्रश्नों के लिए, SQL सर्वर निम्न नियम का उपयोग करेगा। SELECT COUNT(*)
. जैसी क्वेरी करने के लिए , SQL सर्वर सबसे संकीर्णगैर-संकुल . का उपयोग करेगा पंक्तियों को गिनने के लिए index. यदि तालिका में कोई गैर-संकुल अनुक्रमणिका नहीं है, तो उसे तालिका को स्कैन करना होगा।
साथ ही, यदि आपकी तालिका में संकुल . है अनुक्रमणिका आप निम्न क्वेरी का उपयोग करके अपनी गिनती और भी तेज़ी से प्राप्त कर सकते हैं (इस साइट से उधार ली गई पंक्ति गणना तेज़ी से प्राप्त करें!)
--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
पा सकते हैंयहाँ एक और लिंक है मेरा SELECT COUNT(*) इतना धीमा क्यों चल रहा है? दूसरे समाधान के साथ। यह तकनीक दिखाता है कि जब आप टेबल पर राइट क्लिक करते हैं और गुणों का चयन करते हैं तो Microsoft पंक्तियों की संख्या को जल्दी से प्रदर्शित करने के लिए उपयोग करता है।
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’)
SQL कितनी बार sysindexes तालिका को अपडेट करता है, इसके आधार पर यह संख्या थोड़ी दूर हो सकती है, लेकिन यह आमतौर पर सही (या कम से कम काफी करीब) है।