Home Covering Index란
Post
Cancel

Covering Index란

Covering Index란

🎊 시작하기 전에…

인덱스에 대한 기초적인 지식이 있어야 이해가 편하다.

테이블은 아래와 같다.

1
2
3
4
5
6
7
CREATE TABLE yatudy(
	a PK,
  b,
  c
  
  INDEX IDX_YATUDY (b)
)

1️⃣ 첫 번째로

아래 두 개의 쿼리를 보자.

1
SELECT * FROM yatudy WHERE b = 'value';
1
SELECT b FROM yatudy WHERE b = 'value';

이 두개의 성능이 다르다면 어떨까?

직관적으로 바로 이해가 되진 않는다.

“DB에서 쿼리를 날리면 테이블에서 대충 찾아서 값이 나오는건데, b만 가져오는거나 다 가져오는거나 이미 값 블록(row)를 찾은 상태이지않나?” 라는 생각이 들 수 있다. 나도 처음에 그런 생각이었다.

근데, 우리는 Index가 쿼리에 꽤 큰 영향을 미친다는것을 간과하였다.

2️⃣ 두 번째로

위에서 본 쿼리의 성능이 다른 이유는 인덱스를 타기 때문이다.

Cluster, Non-Cluster Index에 대해 따로 다루지는 않을 것이다.

Non-Cluster Index(현재 b 컬럼)가 걸려있는 컬럼을 Where문으로 걸러내는 쿼리인데, 우선 yatudy를 조회할 때 사용하는 테이블은 2개 그 이상이다.

인덱스 테이블이 있기 때문인데 b라는 컬럼의 인덱스 정보를 저장한 테이블이 있고, 실제 정보와 매핑되어있는(Cluster Index) 테이블이 있는데 b(인덱스 컬럼)만 가져온다면 굳이 실제 정보와 매핑되어있는 테이블까지 갈 필요가없기때문에 성능이 더 좋은 것이다.

✅ 끝으로

위 예제처럼 실제 데이터를 접근하지않아도 원하는 데이터를 얻을 수 있는 인덱스를 커버링 인덱스(Covering Index)라고 한다.

간단해보이는 쿼리가 쌓이면 성능적으로 문제가될 수 있다. 쿼리를 작성할 때마다 위와같은 사항을 고려하면서 짜면 좋을 것 같다.

This post is licensed under CC BY 4.0 by the author.