2011-11-15 13 views
7

मैंने हाल ही में एक जूमला अपग्रेड किया है! आलेखों के एक बड़े डेटासेट के साथ 1.5 से 1.7 तक स्थापना और अपग्रेड विधि डेटाबेस को अपग्रेड कर रही थी (मूल रूप से दूसरी तालिका में सामग्री डालने) मैंने देखा कि पंक्तियां कॉलम मान को टिल्डे (~):phpMyAdmin - पंक्तियों कॉलम में क्या एक tilde (~) का मतलब है?

के साथ प्रीफ़िक्स किया गया था

See image

अब, पहली बार मुझे लगता है कि यह मानना ​​है कि मान अनुमानित है क्योंकि जब मैं पृष्ठ को रीफ्रेश करता हूं तो मुझे एक अलग मान दिखाई देता है, कभी-कभी उच्च, कभी-कभी कम होता है। ठीक है, मान लें कि मान अनुमानित है, उस स्थिति में, इसका कारण क्या है? कुछ विचार:

  • ओएस: विंडोज 7
  • सर्वर: अपाचे 2 पीएचपी 5.3 के साथ और MySQL 5.1.50-समुदाय।

उत्तर

11

पंक्ति संख्या InnoDB द्वारा क्वेरी अनुकूलन के लिए इस्तेमाल एक सन्निकटन है। एक गिनती (*) करना बहुत अधिक अक्षम है और क्वेरी योजना को अनुकूलित करने के लिए पंक्तियों की संख्या का कोई अंदाजा नहीं है। phpMyAdmin तालिका के बारे में जानकारी प्राप्त करने के लिए एक "शो टेबल स्थिति" क्वेरी कर रही होगी:

http://dev.mysql.com/doc/refman/5.0/en/show-table-status.html

ऐसे InnoDB के रूप में अन्य भंडारण इंजन, के लिए, यह मूल्य एक सन्निकटन है, और से भिन्न हो सकते हैं वास्तविक मूल्य 40 से 50% तक। ऐसे मामलों में, सटीक गणना प्राप्त करने के लिए SELECT COUNT (*) का उपयोग करें।

+0

धन्यवाद बेनकोडर, इसलिए मैं जांच करूंगा कि स्टोरेज इंजन को बदलने के लिए सुविधाजनक है या नहीं। तुम्हारी सहायता सराहनीय है। –

+0

आपका स्वागत है। मैं नहीं देख सकता कि यह क्यों जरूरी है। क्या आप इस आउटपुट पर phpmyadmin से कुछ के लिए भरोसा कर रहे हैं? यह शायद एक विशिष्ट पृष्ठ लिखने के लिए बेहतर होगा जो आपको गिनती (*) – bencoder

+0

का उपयोग करके सही मान देता है गलत निष्कर्ष निकाला न करें। आपका सेटअप टूटा नहीं गया है, और स्टोरेज इंजन को बदलने की कोई आवश्यकता नहीं है। –

1

तालिका प्रकार क्या हैं? MyISAM टेबल उनके मेटाडेटा में सटीक पंक्ति गणना संग्रहीत करते हैं। (~ = "लगभग") एक के बजाय InnoDB टेबल, के रूप में सटीक पंक्ति संख्या क्या लेन-देन "उड़ान" में हैं पर निर्भर करता है, तो गिनती उन लोगों के लिए दिखाया गया है एक अनुमान के रूप में चिह्नित किया गया है नहीं कर सकते "यह वास्तव में यह कई है "।

+0

धन्यवाद मार्क, वे InnoDB कर रहे हैं। –

7

MySQL Manual on InnoDB restrictions के अनुसार:

  • SHOW TABLE STATUS शारीरिक आकार तालिका द्वारा आरक्षित के लिए छोड़कर, InnoDB टेबल पर सटीक आँकड़े नहीं देता है। पंक्ति गणना केवल SQL अनुकूलन में उपयोग किया जाने वाला एक अनुमानित अनुमान है।

  • InnoDB एक तालिका में पंक्तियों की एक आंतरिक गिनती नहीं रखता है क्योंकि समवर्ती लेनदेन एक ही समय में पंक्तियों की अलग नंबरों "देख" हो सकता है। एक SELECT COUNT(*) FROM t बयान संसाधन के लिए, InnoDB तालिका के एक सूचकांक है, जो कुछ समय अगर सूचकांक बफर पूल में पूरी तरह से नहीं है लेता स्कैन करना होगा। यदि आपकी तालिका अक्सर बदलती नहीं है, तो MySQL क्वेरी कैश का उपयोग करना एक अच्छा समाधान है। तेजी से गिनती पाने के लिए, आपको एक काउंटर टेबल का उपयोग करना होगा जो आप स्वयं बनाते हैं और अपने एप्लिकेशन को इसे आवेषण के अनुसार अपडेट करते हैं और इसे हटा देता है। यदि अनुमानित पंक्ति गणना पर्याप्त है, SHOW TABLE STATUS का उपयोग किया जा सकता है। खंड 13.2.13.1, "InnoDB Performance Tuning Tips" देखें।

SHOW TABLE STATUS के लिए page के अनुसार, InnoDB rowcounts को 50% से वास्तविक गणना से भिन्न हो सकते हैं दिखाया गया है।

+0

यह कुछ भी सही नहीं है। –

+0

मुझे नहीं लगता कि शब्द का अर्थ है कि इसका मतलब क्या है। –

+0

मुझे लगता है, यह सिर्फ एक संदर्भ है। –

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