MSSQL Include Index, Covered Index

김경민·2022년 7월 12일
1

database

목록 보기
10/10
post-thumbnail

커버드 인덱스(Covered Index, Covering Index)

아래 쿼리에서 Name과 Age에 index 가 설정 된 경우

SELECT Age 
FROM [Table_Name] 
WHERE Name = 'TEST';
  • 출력되어야 하는 모든 컬럼이 인덱스 구성에 포함되어 있는 경우로 인덱스 내에서 모두 찾을 수 있기 때문에 I/O 감소
  • 쿼리 조회 시 Index Key상에서 조회할 수 있는 컬럼들이 모두 존재하여 Disk로 가지 않고도 Data를 제공할 수 있는 대상을 의미

포괄열 인덱스(Include Index)

아래 쿼리에서 Name과 Age에 index 가 설정 된 경우

SELECT Age, Address, phone
FROM [Table_Name] 
WHERE Name = 'TEST';

=> Address, phone 로 인해 Lookup 발생으로 I/O 발생

  • Heap인 경우 RID Lookup을, Clustered Index 구성인 경우 Key Lookup 작업을 함
  • 이때 Random Access가 발생하는 I/O가 증가하는 현상
CREATE NONCLUSTERED INDEX IX_Address_phone 
ON [Table_Name] (Name, Age) 
INCLUDE (Address, phone); 

=> INCLUDE 하여 포괄열 인덱스 생성
=> Lookup 현상 발생하지 않아 I/O 감소

  • 키가 아닌 열은 NonClustered Index에 대해서만 정의
  • text, ntext 및 image 를 제외한 모든 데이터 형식을 키가 아닌 열로 사용할 수 있음
  • 키가 아닌 열을 포함하여 여러 쿼리를 처리하는 비클러스터형 인덱스를 만드는 것
  • 쿼리의 모든 열이 키 열 또는 키가 아닌 열로 인덱스에 포함되면 키가 아닌 열이 있는 인덱스는 쿼리 성능을 상당히 향상시킬 수 있음
  • 성능이 향상되는 이유는 쿼리 최적화 프로그램이 테이블 또는 클러스터형 인덱스 데이터에 액세스하지 않고 인덱스 내에서 모든 열 값을 찾을 수 있으므로 디스크 I/O 작업을 줄어들기 때문임

출처 및 참고 사이트 리스트

포괄 열을 사용하여 인덱스 만들기

Include Index, Covered Index

MSSQL Index의 모든 것

MSSQL - 커버드 인덱스/포괄열 인덱스

[MSSQL] Covered Index / Include Index

0개의 댓글