MSSQL - 인덱스와 외래키를 조회하는 쿼리 (PK/FK 확인)

 

인덱스 조회하기

  • 조회되는 정보
    • 인덱스를 구성하고있는 테이블 이름
    • 정의한 인덱스 이름
    • 인덱스로 지정한 컬럼 이름
    • 고유 값 여부
    • 기본 키 여부


  • 데이터베이스 내의 모든 인덱스 조회
SELECT
    t.name AS '테이블 이름',
    ix.name AS '인덱스 이름',
    c.name AS '컬럼 이름',
    ix.is_unique AS '고유한 값 여부',
    ix.is_primary_key AS '기본 키 여부'
FROM
    sys.indexes ix
INNER JOIN
    sys.tables t ON ix.object_id = t.object_id
INNER JOIN
    sys.index_columns ic ON ix.object_id = ic.object_id AND ix.index_id = ic.index_id
INNER JOIN
    sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
ORDER BY t.name;

  • 특정 테이블의 인덱스 조회
    • where절에 테이블명 입력
SELECT
    t.name AS '테이블 이름',
    ix.name AS '인덱스 이름',
    c.name AS '컬럼 이름',
    ix.is_unique AS '고유한 값 여부',
    ix.is_primary_key AS '기본 키 여부'
FROM
    sys.indexes ix
INNER JOIN
    sys.tables t ON ix.object_id = t.object_id
INNER JOIN
    sys.index_columns ic ON ix.object_id = ic.object_id AND ix.index_id = ic.index_id
INNER JOIN
    sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
WHERE
    t.name = --'테이블명 입력';

외래키 조회하기

  • 조회되는 정보
    • 정의한 외래키 이름
    • 외래키를 지정한 테이블 이름
    • 외래키를 지정한 컬럼 이름
    • 외래키로 참조된 테이블 이름
    • 외래키로 참조된 컬럼 이름
    • 외래키 지정 순서


  • 데이터베이스 내의 모든 외래키 조회
SELECT
	fk.name AS '외래키 이름',
    OBJECT_NAME(fkc.parent_object_id) AS '테이블 이름',
    c1.name AS '컬럼 이름',
    OBJECT_NAME(fkc.referenced_object_id) AS '참조된 테이블 이름',
    c2.name AS '참조된 컬럼 이름',
    fkc.constraint_column_id AS '외래키 순서'
FROM
    sys.foreign_key_columns fkc
INNER JOIN
    sys.columns c1 ON fkc.parent_column_id = c1.column_id AND fkc.parent_object_id = c1.object_id
INNER JOIN
    sys.columns c2 ON fkc.referenced_column_id = c2.column_id AND fkc.referenced_object_id = c2.object_id
INNER JOIN
	sys.foreign_keys fk ON fk.object_id = fkc.constraint_object_id
ORDER BY
    OBJECT_NAME(fkc.parent_object_id), fkc.constraint_column_id;

  • 특정 테이블의 외래키 조회
    • where절에 테이블명 입력
SELECT
	fk.name AS '외래키 이름',
    OBJECT_NAME(fkc.parent_object_id) AS '테이블 이름',
    c1.name AS '컬럼 이름',
    OBJECT_NAME(fkc.referenced_object_id) AS '참조된 테이블 이름',
    c2.name AS '참조된 컬럼 이름',
    fkc.constraint_column_id AS '외래키 순서'
FROM
    sys.foreign_key_columns fkc
INNER JOIN
    sys.columns c1 ON fkc.parent_column_id = c1.column_id AND fkc.parent_object_id = c1.object_id
INNER JOIN
    sys.columns c2 ON fkc.referenced_column_id = c2.column_id AND fkc.referenced_object_id = c2.object_id
INNER JOIN
	sys.foreign_keys fk ON fk.object_id = fkc.constraint_object_id
WHERE
    OBJECT_NAME(fkc.parent_object_id) = --'테이블명 입력'
ORDER BY
    fkc.constraint_column_id;