MySQL में इंडेक्स का आकार कैसे पता करें


88

मैं अपने अनुक्रमित के आकार को निर्धारित करना चाहता हूं, वे प्राथमिक प्रमुख सूचकांक हैं। यह mysql क्लस्टर पर होता है, लेकिन मुझे नहीं लगता कि यह महत्वपूर्ण है।

जवाबों:


100

मुझे लगता है कि आप यही देख रहे हैं।

show table status from [dbname]

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


2
औसत_प्रत्यक्ष, डेटा_प्रवाह, मैक्स_डाटा_लगावस्था, अनुक्रमणिका_प्रवाह, दाता_फ्री सभी बाइट्स में बताए गए हैं, हां।
ल्यूक रहमान

23
यह कुल सूचकांक आकार देता है , प्रति सूचकांक आकार नहीं (एक तालिका में कई सूचकांक हैं)।
साईं

76

वाजेक हर्मेज़ के उत्तर का विस्तार।
यह है कि आप मेगाबाइट में, PRIMARY (जो कि स्वयं तालिका है) के बिना, आकार द्वारा आदेशित सभी अनुक्रमणिका आकार प्राप्त कर सकते हैं।

SELECT database_name, table_name, index_name,
ROUND(stat_value * @@innodb_page_size / 1024 / 1024, 2) size_in_mb
FROM mysql.innodb_index_stats
WHERE stat_name = 'size' AND index_name != 'PRIMARY'
ORDER BY size_in_mb DESC;

1
क्यों 4 से आदेश?
एलेक्स

1
@ एलेक्स इसलिए यह 4 के क्षेत्र द्वारा ऑर्डर करता है, जो कि आकार है। यानी सबसे बड़ी तालिका पहले, सबसे छोटी आखिरी शो
डैनियल ज़ोहर

1
क्या इसका उपयोग करना बेहतर नहीं है ORDER BY size_in_mb DESC;:?
NeverEndingQueue

1
@NeverEndingQueue यह स्टाइल का मामला है, लेकिन मैं देख सकता हूं कि इस मामले में यह अधिक पठनीय होगा। मैंने उत्तर में संशोधन किया है और जैसा आपने सुझाया था, अब यह पढ़ता है।
डैनियल ज़ोहर

42

यदि आप InnoDB तालिकाओं का उपयोग कर रहे हैं, तो आप व्यक्तिगत अनुक्रमित से आकार प्राप्त कर सकते हैं mysql.innodb_index_stats। 'आकार' स्टेट में उत्तर होता है, पृष्ठों में, इसलिए आपको इसे पृष्ठ-आकार से गुणा करना होगा, जो कि डिफ़ॉल्ट रूप से 16K है

select database_name, table_name, index_name, stat_value*@@innodb_page_size
from mysql.innodb_index_stats where stat_name='size';

1
बहुत खुबस। ठीक वही जो मेरे द्वारा खोजा जा रहा था!
डेव मार्टोराना

3
स्पष्ट करने के लिए: इस क्वेरी के साथ, stat_valueपहले से ही पृष्ठ-आकार से गुणा किया जाता है, इसलिए कॉलम बाइट्स में सूचकांक आकार देता है।
बेनेडिकट कोप्पेल

2
धन्यवाद, स्वीकृत उत्तर से बहुत बेहतर। मेरे जैसे अन्य नॉब्स के लिए एक नोट - डेटाबेस_नाम, टेबल_नाम और इंडेक्स_नाम को आपके वास्तविक डेटाबेस के नाम और टेबल नाम के साथ प्रतिस्थापित नहीं किया जाना चाहिए;) इसके बजाय कमांड का उपयोग ठीक उसी तरह किया जाना चाहिए जैसा कि यह है।
जुबान

मेरे मामले में इसने एक बहुत अलग (और अवास्तविक) आकार दिया जिसकी रिपोर्ट की गई थीshow table status from [dbname]
आर्किटेक्चरल

6

पर MyISAM, प्रत्येक सूचकांक ब्लॉक है 4 KBतक भरा पेज fill_factorसूचकांक रिकॉर्ड के साथ, प्रत्येक जा रहा है key length + 4लंबे बाइट्स।

Fill factor आम तौर पर है 2/3

के रूप में InnoDB, तालिका पर हमेशा क्लस्टर किया जाता है PRIMARY KEY, कोई अलग PRIMARY KEYसूचकांक नहीं है


6

यहाँ ऊपर दिए गए कुछ में से एक अनुकूलन भी है जो आपको उस तालिका के लिए कुल सूचकांक का प्रतिशत देता है जिसका उपयोग प्रत्येक सूचकांक करता है, उम्मीद है कि यह किसी के लिए उपयोगी होगा

select 
    database_name, 
    table_name, 
    index_name, 
    round((stat_value*@@innodb_page_size)/1024/1024, 2) SizeMB, 
    round(((100/(SELECT INDEX_LENGTH FROM INFORMATION_SCHEMA.TABLES t WHERE t.TABLE_NAME = iis.table_name and t.TABLE_SCHEMA = iis.database_name))*(stat_value*@@innodb_page_size)), 2) `Percentage`
from mysql.innodb_index_stats iis 
where stat_name='size' 
and table_name = 'TargetTable'
and database_name = 'targetDB'

उदाहरण आउटपुट

database_name   table_name  index_name  SizeMB  Percentage
targetDB        TargetTable id          10      55.55
targetDB        TargetTable idLookup    5       27.77
targetDB        TargetTable idTest      3       16.66

सादर लियाम


मेरे पास एक विशेष मामला है जिसमें पीके इंडेक्स के लिए प्रतिशत 100 से अधिक मान दिखाता है, जैसे 1844 या 677। मुझे लगता है कि उन मामलों के लिए क्वेरी के साथ एक समस्या है।
एलेक्स पंडरी

2

PhpMyAdmin का उपयोग करते हुए, जब टेबल संरचना को देखते हैं तो नीचे कहीं पर एक विवरण लिंक होता है। एक बार जब आप उस पर क्लिक करते हैं, तो यह आपके द्वारा तालिका में दर्ज किए गए अनुक्रमों का कुल आकार दिखाएगा, जहां यह अंतरिक्ष उपयोग के रूप में चिह्नित है।

मुझे नहीं लगता कि यह आपको प्रत्येक सूचकांक को व्यक्तिगत रूप से दिखाता है।


PhpMyAdmin के साथ यह वास्तव में आसान है। धन्यवाद!
MrFabio


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.