आधिकारिक MySQL 5.1 दस्तावेज़ीकरण
स्वीकार करता है कि InnoDB SHOW TABLE STATUS
के साथ सटीक आंकड़े नहीं देता है . जबकि MYISAM टेबल विशेष रूप से मेटा-डेटा का एक आंतरिक कैश रखते हैं जैसे कि पंक्तियों की संख्या आदि, InnoDB इंजन टेबल डेटा और इंडेक्स दोनों को */var/lib/mysql/ibdata**
InnoDB के पास पंक्ति संख्याओं की त्वरित क्वेरी की अनुमति देने वाली कोई समीचीन अनुक्रमणिका फ़ाइल नहीं है।
असंगत तालिका पंक्ति संख्या SHOW TABLE STATUS
द्वारा रिपोर्ट की जाती हैं क्योंकि InnoDB तालिका डेटा (*/var/lib/mysql/ibdata** में) की एक श्रेणी का नमूना लेकर 'पंक्तियों' मान का गतिशील रूप से अनुमान लगाता है और फिर पंक्तियों की अनुमानित संख्या को एक्सट्रपलेशन करता है। इतना ही नहीं InnoDB दस्तावेज़ SHOW TABLE STATUS
का उपयोग करते समय पंक्ति संख्या की अशुद्धि को 50% तक स्वीकार करता है।
MySQL दस्तावेज़ लगातार पंक्ति संख्या क्वेरी प्राप्त करने के लिए MySQL क्वेरी कैश का उपयोग करने का सुझाव देते हैं, लेकिन दस्तावेज़ कैसे निर्दिष्ट नहीं करते हैं . यह कैसे किया जा सकता है इसकी एक संक्षिप्त व्याख्या इस प्रकार है।
सबसे पहले, जांचें कि क्वेरी कैशिंग सक्षम है:
mysql> SHOW VARIABLES LIKE 'have_query_cache';
अगर have_query_cache . का मान है नहीं फिर /etc/my.cnf . में निम्न पंक्तियों को जोड़कर क्वेरी कैश को सक्षम करें और फिर mysqld को पुनरारंभ करें।
have_query_cache=1 # added 2017 08 24 wh
query_cache_size = 1048576
query_cache_type = 1
query_cache_limit = 1048576
(अधिक जानकारी के लिए देखें http://dev.mysql. com/doc/refman/5.1/hi/query-cache.html )
कैश की सामग्री को क्वेरी करें
mysql> SHOW STATUS LIKE 'Qcache%';
अब SQL_CALC_FOUND_ROWS
का उपयोग करें SELECT
. में स्टेटमेंट क्वेरी:
SELECT SQL_CALC_FOUND_ROWS COUNT(*) FROM my_innodb_table
SQL_CALC_FOUND_ROWS
कैश से पढ़ने का प्रयास करेगा और, यदि यह क्वेरी नहीं मिलती है, तो निर्दिष्ट तालिका के विरुद्ध क्वेरी निष्पादित करें और फिर क्वेरी कैश में तालिका पंक्तियों की संख्या को प्रतिबद्ध करें। उपरोक्त क्वेरी के अतिरिक्त निष्पादन (या अन्य 'कैशेबल' SELECT
कथन - नीचे देखें) कैश से परामर्श करेगा और सही परिणाम लौटाएगा।
बाद में 'cachable' SELECT
प्रश्न
- भले ही वे LIMIT
. हों परिणाम - क्वेरी कैश से परामर्श करेगा और आपको
SELECT FOUND_ROWS();
जो पिछली कैश्ड क्वेरी की सही तालिका पंक्ति कुल लौटाता है।