MySQL में डेटाबेस या टेबल के लिए इंडेक्स कैसे देखें?


485

मैं कैसे देखूं कि मेरे डेटाबेस में कोई इंडेक्स है?

एक विशिष्ट तालिका के लिए कैसे?


बस उपयोग करें: sp_helpindex 'तालिका का नाम'
user3772443

"बस उपयोग करें: sp_helpindex 'टेबल नेम'" जो सीक्यूएस सर्वर (MSSQL) @ user3772443 नहीं MySQL हो
रेमंड

जवाबों:


793

एक विशिष्ट तालिका उपयोग के लिए सूचकांक को देखने के लिए SHOW INDEX:

SHOW INDEX FROM yourtable;

किसी विशिष्ट स्कीमा के भीतर सभी तालिकाओं के लिए अनुक्रमणिका देखने के लिए आप INFORMATION_SCHEMA से सांख्यिकी तालिका का उपयोग कर सकते हैं:

SELECT DISTINCT
    TABLE_NAME,
    INDEX_NAME
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'your_schema';

जहां क्लॉज को हटाने से आपको सभी स्कीमा में सभी अनुक्रमित दिखाई देंगे।


10
ध्यान दें कि DISTINCTकीवर्ड कुछ इंडेक्स को मास्क करेगा - मेरे पास एक टेबल है जहां एक इंडेक्स का एक ही नाम है लेकिन दो अलग-अलग कॉलम पर उपयोग किया जाता है, इसलिए यहां सूचना स्कीमा उदाहरण केवल एक इंडेक्स दिखाएगा।
बेन

मुझे from mydbLiorK के उत्तर में दिखाए गए अनुसार जोड़ना था ।
नैट

@ मेन बायर्स क्या इंडेक्स टेबल को देखने का एक तरीका है? SQL आंतरिक रूप से अनुक्रमणिका फ़ाइल कैसे उत्पन्न करता है? यह इंडेक्स टेबल से मेन टेबल तक रिकॉर्ड के पॉइंटर को कैसे स्टोर करता है?
यजंत ब

इसलिए मेरी तालिका INFORMATION_SCHEMA.STATISTICS में दिखाई देती है, लेकिन इसमें केवल एक प्रविष्टि है, index_name। स्तंभ नाम इंगित करने के लिए कोई अतिरिक्त प्रविष्टि नहीं है। अन्य सभी तालिकाओं में कई प्रविष्टियाँ होती हैं जो कुछ इस तरह दिखाती हैं: PRIMARY c1, c2 जहाँ c1, c2 समग्र प्राथमिक कुंजी बनाते हैं। कोई विचार क्यों?
स्टीवर्स

56

यदि आप सभी डेटाबेस को एक साथ सभी अनुक्रमित देखना चाहते हैं:

use information_schema;
SELECT * FROM statistics;

4
एक-लाइनर के रूप में:SELECT * FROM information_schema.statistics;
एनहोमोनिक


7

आप निर्दिष्ट डेटाबेस में प्रत्येक तालिका के अनुक्रमणिका नामों के साथ-साथ अनुक्रमणिकाओं की संख्या प्राप्त करने के लिए इस क्वेरी का उपयोग कर सकते हैं।

SELECT TABLE_NAME,
       COUNT(1) index_count,
       GROUP_CONCAT(DISTINCT(index_name) SEPARATOR ',\n ') indexes
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'mydb'
      AND INDEX_NAME != 'primary'
GROUP BY TABLE_NAME
ORDER BY COUNT(1) DESC;

5

मैं इस प्रश्न का प्रस्ताव करता हूं:

SELECT DISTINCT s.*
FROM INFORMATION_SCHEMA.STATISTICS s
LEFT OUTER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS t 
    ON t.TABLE_SCHEMA = s.TABLE_SCHEMA 
       AND t.TABLE_NAME = s.TABLE_NAME
       AND s.INDEX_NAME = t.CONSTRAINT_NAME 
WHERE 0 = 0
      AND t.CONSTRAINT_NAME IS NULL
      AND s.TABLE_SCHEMA = 'YOUR_SCHEMA_SAMPLE';

आपने सभी इंडेक्स को केवल इंडेक्स पाया ।

संबंध।


3

अनुक्रम क्रम में एक कॉलम में सभी अनुक्रमित स्तंभों को प्रति सूचकांक प्राप्त करने के लिए।

SELECT table_name AS `Table`,
       index_name AS `Index`,
       GROUP_CONCAT(column_name ORDER BY seq_in_index) AS `Columns`
FROM information_schema.statistics
WHERE table_schema = 'sakila'
GROUP BY 1,2;

संदर्भ: http://blog.9minutesnooze.com/mysql-information-schema-indexes/


2

Db पर सभी विकलांग सूचकांक की जाँच करने के लिए

SELECT INDEX_SCHEMA, COLUMN_NAME, COMMENT 
FROM information_schema.statistics
WHERE table_schema = 'mydb'
AND COMMENT = 'disabled'

2

आप MySQL कार्यक्षेत्र में अपने अनुक्रमित की जांच कर सकते हैं। प्रदर्शन रिपोर्ट टैब को आप सिस्टम पर सभी उपयोग किए गए अनुक्रमित और अप्रयुक्त अनुक्रमित देख सकते हैं। या आप क्वेरी को फायर कर सकते हैं।

select * from sys.schema_index_statistics;

पॉल जो उपकरण आप उपयोग कर रहे हैं? यह कोड mysql वर्कबेंच में काम करता है।
गणेश गिरी

मैंने इसे MySQL शेल
पॉल बैसेंको

क्या आप माईसकल वर्कबेंच का उपयोग करके इसे आज़मा सकते हैं। sys.schema_index_statistics से * चुनें;
गणेश गिरी

2

यह मेरे मामले में अनुक्रमित क्षेत्रों के लिए संबंधित तालिका में तालिका का नाम और स्तंभ नाम प्राप्त करने के लिए काम करता है।

SELECT TABLE_NAME , COLUMN_NAME, COMMENT 
FROM information_schema.statistics
WHERE table_schema = 'database_name';
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.