मैं अपनी तालिका में पंक्तियों की संख्या गिनने का एक तेज़ तरीका चाहता हूं जिसमें कई मिलियन पंक्तियाँ हैं। स्टैक ओवरफ्लो पर मुझे पोस्ट " MySQL: Fastest way to count number of row " मिली , जो ऐसा लग रहा था कि यह मेरी समस्या को हल कर देगा। बियुआ ने यह उत्तर दिया:
SELECT
table_rows "Rows Count"
FROM
information_schema.tables
WHERE
table_name="Table_Name"
AND
table_schema="Database_Name";
जो मुझे पसंद आया क्योंकि यह स्कैन के बजाय एक लुकअप जैसा दिखता है, इसलिए यह तेज़ होना चाहिए, लेकिन मैंने इसके खिलाफ परीक्षण करने का फैसला किया
SELECT COUNT(*) FROM table
यह देखने के लिए कि प्रदर्शन में कितना अंतर था।
दुर्भाग्य से मुझे नीचे दिखाए गए अनुसार अलग-अलग उत्तर मिल रहे हैं:
सवाल
उत्तर लगभग 2 मिलियन पंक्तियों द्वारा भिन्न क्यों हैं? मैं उस क्वेरी का अनुमान लगा रहा हूं जो एक पूर्ण तालिका स्कैन करता है वह अधिक सटीक संख्या है, लेकिन क्या कोई तरीका है जिससे मुझे इस धीमी क्वेरी को चलाने के बिना सही संख्या मिल सकती है?
मैं भाग गया ANALYZE TABLE data_302
, जो 0.05 सेकंड में पूरा हुआ। जब मैंने फिर से क्वेरी चलाई, तो मुझे अब 34384599 पंक्तियों का बहुत करीब से परिणाम मिल रहा है, लेकिन यह अभी भी select count(*)
34906061 पंक्तियों के समान संख्या नहीं है । क्या टेबल का विश्लेषण तुरंत वापस आता है और पृष्ठभूमि में प्रक्रिया होती है? मुझे लगता है कि यह उल्लेख करने लायक है कि यह एक परीक्षण डेटाबेस है और वर्तमान में इसे लिखा नहीं जा रहा है।
किसी को परवाह नहीं है अगर यह किसी को बताने का मामला है कि तालिका कितनी बड़ी है, लेकिन मैं पंक्ति गिनती को कोड के एक बिट में पास करना चाहता था जो डेटाबेस को क्वेरी करने के लिए "समान आकार" अतुल्यकालिक प्रश्नों को बनाने के लिए उस आकृति का उपयोग करेगा। समानांतर में, सिकंदर रुबिन द्वारा समानांतर क्वेरी निष्पादन के साथ धीमी क्वेरी प्रदर्शन बढ़ाने में दिखाए गए तरीके के समान है । जैसा कि यह है, मैं बस के साथ उच्चतम आईडी प्राप्त करूंगा SELECT id from table_name order by id DESC limit 1
और आशा करता हूं कि मेरे टेबल भी खंडित नहीं होंगे।
NUM_ROWS
colum