2008-09-24 9 views

답변

117

사용 SHOW INDEX :

SHOW INDEX FROM [tablename] 

문서 : https://dev.mysql.com/doc/refman/5.0/en/show-index.html

+28

SHOW INDEX FROM'my_table' WHERE Key_name = 'index_to_check'; – mit

+5

Key_name 대신 Column_name을 사용하는 것이 더 효율적입니다. 이름없이 자동으로 추가되는 경우 인덱스 이름을 찾을 필요가 없습니다. – Programista

+0

여러 개의 키를 확인하는 방법은 무엇입니까? – berserk

1

그냥 CLI에서 테이블 레이아웃에서 찾으십시오. 당신은 할 것

내림차순 MYTABLE

또는

쇼 MyTable 테이블

32

시도 :

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

그것은 당신에게 내가 말할 것 f 색인에 주어진 이름을 알 필요없이 특정 열에 어떤 종류의 색인이 있습니다. (인덱스를 보여 반대) 또한 저장 프로 시저에서 작동

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)에서 모든 인덱스를 가져온 다음 foreach 루프에서 열 이름 (이 경우 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; 
    } 
} 

이렇게하면 색인 속성을 실제로 좁힐 수 있습니다. 작업 할 수있는 것을보기 위해 print_r$res으로하십시오.

-1

당신은 인덱싱 된 테이블에 지정된 열을 확인하려면 다음 SQL 문을 사용 여부를

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_ * 반대 조인 때문에, 그래서 경기 인덱스는 InnoDB 테이블 만

0
을 온 수 your_table

로부터 SHOW 색인을 그리고 필드에 대한 결과 확인 :

는 다음 문을 사용하여 행 [ "표"], 행 [ "KEY_NAME을"]

"Key_name"을 올바르게 작성했는지 확인하십시오.

관련 문제