Covering Index(이하 커버링) 란..
쿼리의 모든 항목이 인덱스 컬럼으로 이루어진 상태를 이야기한다.
해당 내용을 알기 위해선
클러스터/논클러스터 키에 대해서도 알아야 한다.
Clustered key | nonClustered key |
- ( 테이블당 한개만 존재) - PK - PK가 없을땐 유니크키가 클러스터키가 된다. - 둘다없으면 히든키(rowId)를 생성한다.(6byte) |
non clustered key - 일반적인 index |
select name from Users where age = 1;
우리에게 Users 테이블이 있고 해당 테이블에 정보는 아래와 같다고 한다.
컬럼 : id / name / age
PK: id
index : age
위 쿼리를 살펴봤을때 ,
우리는 위에 name컬럼을 보여주기 위해서는 해당 데이터의 블록위치를 알아야한다.
where절에 있는 조건이 index에 부합하더라도 index컬럼외에 다른 컬럼값이 필요하기 때문에
논 클러스터 키와 함께있는 클러스터키를 이용하여 데이터의 블록 위치를 찾을 수 있다.
(논 클러스터키에는 데이터블록위치가 없어 클러스터키가 항상 포함된다)
만약 위 쿼리가 아래와 같은 쿼리였다면
select id from Users where id = 1;
PK를 사용하기 때문에 인덱스 타임이 없어지니 접근속도가 빨라진다고 볼 수 있다.
커버링 인덱스란 위 2번처럼. 실제데이터 접근없이 인덱스로만 쿼리를 완성하는 것이라고 볼 수 있다.
추후 실행계획을 통해 데이터블록접근이 있었는지 확인해 볼 수 있다.