2013-08-13 5 views
12

मैं केवल जिज्ञासा के बारे में जानना चाहता हूं, Select Count(*) from SomeTableName भी Select * from SomeTableName के डेटाबेस की सभी पंक्तियों को पार करता है?COUNT (*) अनुक्रमित है?

या डेटाबेस के मेटाडेटा में कोई अन्य गिनती फ़ील्ड उपलब्ध है जो प्रत्येक बार पंक्ति को जोड़ा या हटा दिया जाता है? और उस क्षेत्र को पूर्व क्वेरी द्वारा उपयोग किया जाता है।

मैं भी जानना चाहता हूं कि दोनों प्रश्नों में से कौन सा प्रश्न तेज़ है और कितना?

+0

डीबी कैसे गिनती का ट्रैक रख सकता है? क्या होगा यदि आप फिल्टर के साथ गिनती का अनुरोध करते हैं? –

+2

'गिनती (*)' ठीक है, 'चयन करें * ' –

+0

@ArsenMkrt नहीं है, तो यह केवल डेटा को गिनती करेगा – zxc

उत्तर

17
SELECT Count(*) 
FROM SomeTableName 

हमेशा सभी पंक्तियों की गणना करेगा। हालांकि (SELECT * के विपरीत) इसे सभी कॉलम पढ़ने की ज़रूरत नहीं है और ऐसा करने के लिए उपलब्ध सबसे संकीर्ण (गैर फ़िल्टर) इंडेक्स का उपयोग कर सकते हैं।

MySQL (MyISAM इंजन) के विपरीत यह मेटाडेटा से मान पुनर्प्राप्त नहीं करता है।

मेटाडेटा में एक पंक्ति गणना मूल्य उपलब्ध है और इसे sys.partitions से पुनर्प्राप्त किया जा सकता है लेकिन इसका उपयोग कभी भी COUNT क्वेरी के लिए नहीं किया जाता है और यह हमेशा सटीक नहीं होता है।

+0

इस संक्षिप्त और सरल व्याख्या के लिए धन्यवाद। :) –

संबंधित मुद्दे