2008-09-24 15 views

उत्तर

117

इसलिए की तरह उपयोग SHOW INDEX:

SHOW INDEX FROM [tablename] 

डॉक्स: https://dev.mysql.com/doc/refman/5.0/en/show-index.html

+28

'my_table' से INDEX दिखाएं जहां कुंजी_नाम = 'index_to_check'; – mit

+5

कुंजी_नाम के बजाय कॉलम_नाम का बेहतर उपयोग करें, इस तरह आपको नाम के बिना स्वचालित रूप से जोड़े जाने पर इंडेक्स नाम का पता लगाने की आवश्यकता नहीं है। – Programista

+0

एकाधिक कुंजी कैसे जांचें? – berserk

1

सिर्फ CLI से एक टेबल लेआउट को देखने के लिए। आप क्या करेंगे

desc mytable

या

शो तालिका mytable

32

प्रयास करें:

SELECT * FROM information_schema.statistics 
    WHERE table_schema = [DATABASE NAME] 
    AND table_name = [TABLE NAME] AND column_name = [COLUMN NAME] 

यह आप मैं बता देंगे एफ इंडेक्स को दिए गए नाम को जानने के बिना किसी निश्चित कॉलम पर किसी भी प्रकार की अनुक्रमणिका है। यह भी (के रूप में सूचकांक दिखाने के खिलाफ) एक संग्रहीत प्रक्रिया में काम करेंगे

9
SHOW KEYS FROM tablename WHERE Key_name='unique key name' 

यदि तालिका में एक अद्वितीय कुंजी

6
show index from table_name where Column_name='column_name'; 
-2

आप एक विशिष्ट शो सूचकांक नहीं चल सकता मौजूद है आप पा सकते हैं क्वेरी क्योंकि अगर कोई अनुक्रमणिका मौजूद नहीं है तो यह एक त्रुटि फेंक देगा। इसलिए, यदि आप किसी भी SQL त्रुटियों से बचना चाहते हैं तो आपको सभी इंडेक्स को सरणी और लूप में ले जाना होगा।

हेर्स मैं इसे कैसे करता हूं। मैं तालिका से सभी इंडेक्स को पकड़ता हूं (इस मामले में, leads) और उसके बाद, फ़ोरैच लूप में, जांचें कि कॉलम का नाम (इस मामले में, province) मौजूद है या नहीं।

$this->name = 'province'; 

$stm = $this->db->prepare('show index from `leads`'); 
$stm->execute(); 
$res = $stm->fetchAll(); 
$index_exists = false; 

foreach ($res as $r) { 
    if ($r['Column_name'] == $this->name) { 
     $index_exists = true; 
    } 
} 

इस तरह आप वास्तव में सूचकांक विशेषताओं को सीमित कर सकते हैं। यह देखने के लिए कि आप किसके साथ काम कर सकते हैं, $res पर करें।

-1

आप निम्नलिखित SQL विवरण मेज पर दिए गए स्तंभ की जाँच करने के बाद मिलती है INNODB_SYS_ * खिलाफ हैं उपयोग कर सकते हैं अनुक्रमित किया गया था या नहीं

select a.table_schema, a.table_name, a.column_name, index_name 
from information_schema.columns a 
join information_schema.tables b on a.table_schema = b.table_schema and 
            a.table_name = b.table_name and 
            b.table_type = 'BASE TABLE' 
left join (
select  concat(x.name, '/', y.name) full_path_schema, y.name index_name 
FROM information_schema.INNODB_SYS_TABLES as x 
JOIN information_schema.INNODB_SYS_INDEXES as y on x.TABLE_ID = y.TABLE_ID 
WHERE x.name = 'your_schema' 
and y.name = 'your_column') d on concat(a.table_schema, '/', a.table_name, '/', a.column_name) = d.full_path_schema 
where a.table_schema = 'your_schema' 
and  a.column_name = 'your_column' 
order by a.table_schema, a.table_name; 

, इसलिए मैच अनुक्रमित केवल केवल InnoDB टेबल

0
से आया से your_table

शो सूचकांक और फिर क्षेत्रों के लिए परिणाम की जांच:

निम्न कथन का उपयोग पंक्ति [ "तालिका"], पंक्ति [ "KEY_NAME"]

सुनिश्चित करें कि आप एकाधिक कुंजियों की जांच कैसे करें "KEY_NAME" सही ढंग से

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

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