일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- MSSQL
- Firebase
- typescript
- MVVM
- 플러터
- 애니메이션
- 오류
- 닷넷
- .NET
- page
- 함수
- 마우이
- 리엑트
- db
- Binding
- Maui
- HTML
- MS-SQL
- Flutter
- 바인딩
- AnimationController
- 파이어베이스
- 자바스크립트
- 깃허브
- JavaScript
- listview
- React JS
- spring boot
- GitHub
- Animation
Archives
- Today
- Total
개발노트
17. [MS-SQL] 인덱스가 걸려있는 칼럼 조회하기 본문
반응형
어떤 테이블의 어떤 칼럼에 인덱스가 걸려있는지 조회하기 위한 쿼리 입니다.
SELECT
-- 테이블 이름
TableName = T.name,
-- 인덱스 이름
IndexName = IND.name,
-- 인덱스 ID
IndexId = IND.index_id,
-- 인덱스 컬럼 ID
ColumnId = IC.index_column_id,
-- 컬럼 이름
ColumnName = COL.name,
-- 인덱스 관련 모든 정보
IND.*,
-- 인덱스 컬럼 관련 모든 정보
IC.*,
-- 컬럼 관련 모든 정보
COL.*
FROM
-- 인덱스 정보가 있는 시스템 뷰
sys.indexes IND
INNER JOIN
-- 인덱스 컬럼 정보가 있는 시스템 뷰
sys.index_columns IC ON IND.object_id = IC.object_id AND IND.index_id = IC.index_id
INNER JOIN
-- 컬럼 정보가 있는 시스템 뷰
sys.columns COL ON IC.object_id = COL.object_id AND IC.column_id = COL.column_id
INNER JOIN
-- 테이블 정보가 있는 시스템 뷰
sys.tables T ON IND.object_id = T.object_id
WHERE
-- 기본 키가 아닌 인덱스만 선택 (is_primary_key = 0)
-- is_primary_key: 1 = 기본 키 인덱스
IND.is_primary_key = 0
-- 유니크 인덱스가 아닌 것만 선택 (is_unique = 0)
-- is_unique: 1 = 유니크 인덱스
AND IND.is_unique = 0
-- 유니크 제약 조건이 아닌 것만 선택 (is_unique_constraint = 0)
-- is_unique_constraint: 1 = 유니크 제약 조건
AND IND.is_unique_constraint = 0
-- 논 클러스터드 인덱스만 선택 (type = 2)
-- type: 1 = 클러스터드 인덱스, 2 = 논 클러스터드 인덱스, 3 = XML 인덱스, 4 = 공간 인덱스, 5 = 클러스터드 컬럼스토어 인덱스, 6 = 논 클러스터드 컬럼스토어 인덱스
AND IND.type = 2
-- 시스템이 생성한 테이블이 아닌 사용자 정의 테이블만 선택 (is_ms_shipped = 0)
-- is_ms_shipped: 1 = 시스템이 생성한 테이블
AND T.is_ms_shipped = 0
ORDER BY
-- 테이블 이름, 인덱스 이름, 인덱스 ID, 인덱스 컬럼 ID 순으로 정렬
T.name, IND.name, IND.index_id, IC.index_column_id;
Where절 조건문 설명
- IND.is_primary_key
- 0: 기본 키가 아닌 인덱스만 선택합니다.
- 1: 기본 키 인덱스
- IND.is_unique
- 0: 유니크 인덱스가 아닌 것만 선택합니다.
- 1: 유니크 인덱스
- IND.is_unique_constraint
- 0: 유니크 제약 조건이 아닌 것만 선택합니다.
- 1: 유니크 제약 조건
- IND.type
- type: 1 = 클러스터드 인덱스
- type: 2 = 논 클러스터드 인덱스
- type: 3 = XML 인덱스
- type: 4 = 공간 인덱스
- type: 5 = 클러스터드 컬럼스토어 인덱스
- type: 6 = 논 클러스터드 컬럼스토어 인덱스
- T.is_ms_shipped
- 0: 시스템이 생성한 테이블이 아닌 사용자 정의 테이블만 선택합니다.
- 1: 시스템이 생성한 테이블
조회 예시.
- TableName: 테이블 이름
- IndexName: 인덱스 이름
- IndexId: 인덱스 ID
- ColumnId: 인덱스 컬럼 ID
- ColumnName: 컬럼 이름
- object_id: 오브젝트 ID
- index_id: 인덱스 ID (위와 동일)
- name: 인덱스 이름 (위와 동일)
- type: 인덱스 유형 (1 = 클러스터드 인덱스, 2 = 논 클러스터드 인덱스 등)
- type_desc: 인덱스 유형 설명 (NONCLUSTERED 등)
- index_column_id: 인덱스 컬럼 ID (위와 동일)
- key_ordinal: 인덱스 키 순서
- partition_ordinal: 파티션 순서
- column_id: 컬럼 ID (위와 동일)
- name: 컬럼 이름 (위와 동일)
- object_id: 오브젝트 ID (위와 동일)
특정 쿼리에서 어떤 인덱스가 사용되고 있는지 확인하는 방법.
단축키: Ctl + 'L'
반응형
'DB > MS-SQL' 카테고리의 다른 글
19. [MS-SQL] 정규화 역정규화 사이에서 고민 (0) | 2024.06.19 |
---|---|
18. [MS- SQL] 인덱스 힌트 (인덱스 사용 강제하기) (0) | 2024.06.05 |
16. [MS-SQL] 논클러스터 인덱스(Non-Clustered Index) (1) | 2024.05.31 |
15. [MS-SQL] 클러스터 인덱스(Clustered Index) (0) | 2024.05.31 |
14. [MS-SQL] 인덱스 조회하기 (0) | 2024.05.31 |
Comments