MySQL에서 데이터베이스 또는 테이블의 인덱스를 보는 방법은 무엇입니까?


486

데이터베이스에 인덱스가 있는지 어떻게 알 수 있습니까?

특정 테이블은 어떻습니까?


단지 사용 : 대해 sp_helpindex '테이블 이름'
user3772443

"단지 사용 : 대해 sp_helpindex '테이블 이름'을" 솔기 (MSSQL) @ user3772443하지 MySQL의 SQL 서버가 될 것을
레이몬드 Nijland

답변:


794

특정 테이블의 인덱스를 보려면 SHOW INDEX를 사용하십시오.

SHOW INDEX FROM yourtable;

특정 스키마 내의 모든 테이블에 대한 인덱스를 보려면 INFORMATION_SCHEMA의 STATISTICS 테이블을 사용할 수 있습니다.

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

where 절을 제거하면 모든 스키마의 모든 인덱스가 표시됩니다.


10
있습니다 DISTINCT내가 인덱스 이름은 동일하지만 두 개의 서로 다른 열을 사용하는 테이블이, 정보 스키마 예제는 여기에 하나의 인덱스를 표시합니다 - 그래서 키워드가 어떤 인덱스를 마스크 것입니다.
Ben

from mydbLiorK의 답변에 표시된 것처럼 추가해야했습니다 .
Nate

@Mark Byers 인덱스 테이블 자체를 보는 방법이 있습니까? SQL은 인덱스 파일을 내부적으로 어떻게 생성합니까? 인덱스 테이블에서 메인 테이블로의 레코드 포인터를 어떻게 저장합니까?
yajant b

따라서 내 테이블은 INFORMATION_SCHEMA.STATISTICS에 표시되지만 index_name 항목은 하나만 있습니다. 열 이름을 나타내는 추가 항목이 없습니다. 다른 모든 테이블에는 다음과 같은 여러 항목이 있습니다. PRIMARY c1, c2 여기서 c1, c2는 복합 기본 키를 구성합니다. 왜 그런지 알아?
Stevers

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';

모든 인덱스 찾았습니다 색인을 .

관련.



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;

Paul 어떤 도구를 사용하고 있습니까?이 코드는 MySQL Workbeanch에서 작동합니다.
Ganesh Giri

나는 MySQL의 쉘에서 그것을 사용
폴 Basenko에게

Mysql Workbench를 사용하여 이것을 시도 할 수 있습니까? sys.schema_index_statistics에서 *를 선택하십시오.
Ganesh Giri

2

이것은 색인 된 필드의 해당 테이블에서 테이블 이름과 열 이름을 얻는 경우에 작동합니다.

SELECT TABLE_NAME , COLUMN_NAME, COMMENT 
FROM information_schema.statistics
WHERE table_schema = 'database_name';
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.