2008-09-24 16 views

cevap

117

Kullanım SHOW INDEX:

SHOW INDEX FROM [tablename] 

Dokümanlar: https://dev.mysql.com/doc/refman/5.0/en/show-index.html

+28

MY_table'DEN DÜŞÜK INDEX WHERE Key_name = 'index_to_check'; – mit

+5

Daha İyi yerine KEY_NAME ait sütun_ismi, otomatik olarak adı olmadan eklenirse endeks adını bulmak gerekmez bu şekilde kullanın. – Programista

+0

Birden çok tuş nasıl kontrol edilir? – berserk

1

sadece cli bir tablo düzeni bakmak için. yapardın

desc Tablom

veya

gösteri tablo mytable

32

Dene:

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

Size i anlatacağım indekse verilen ismi bilmeye gerek duymadan belirli bir sütun üzerinde herhangi bir tür indeksi vardır. (Indeks göstermek aksine) Aynı zamanda bir saklı yordam çalışacak

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

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

Belirli bir gösteri endeksi koşamam tablosunda bir benzersiz bir anahtar mevcutsa bulabilirsiniz Sorgu, bir dizin yoksa bir hata verir çünkü. Bu nedenle, tüm dizinleri bir diziye almanız ve SQL hatalarından kaçınmak istiyorsanız bunların içinden geçmeniz gerekir.

İşte ben bunu nasıl. I (bu durumda, leads olarak) tabloda indeksler kapmak ve sütun adı (bu durumda, province) var olup olmadığını, daha sonra bir foreach döngüsünde, kontrol edin.

$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; 
    } 
} 

Bu şekilde dizin niteliklerini gerçekten daraltabilirsiniz. Birlikte çalışma yapabileceğini görmek için $res bir print_r yapın.

-1

dizine edildi tabloda verilmiştir sütununu kontrol etmek için aşağıdaki SQL deyimi kullanıp kullanmayacağına

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_SYS_ * karşıyız katılır beri, bu nedenle maç endeksleri sadece InnoDB tabloları sadece

0
geldi yapabilirsiniz your_table

DAN GÖSTER INDEX Ve sonra alanlar için sonucu kontrol:

aşağıdaki ifadeyi kullanın satır [ "Tablo"], sıra [ "KEY_NAME"]

Birden anahtarlarını kontrol etme doğru

İlgili konular