Covering Index란

태그
데이터베이스

노트

  • 예를 들어서 테이블의 DDL 이 다음과 같다고 가정해보자
CREATE TABLE students ( id name grade school )
  • 여기서 PK는 기본적으로 당연히 인덱스가 걸려있다. grade=3 인 학생을 조회하기 위한 쿼리는 다음과 같다. 이때, grade는 인덱스가 있다고 가정한다.
    • SELECT * FROM students WHERE grade = 3;
  • 여기서 일차적으로 grade를 조회할때는 grade 값을 빠르게 인덱스로 찾아내지만, 문제는 grade를 제외한 name, school 항목들은 인덱스에 존재하지 않는다. 나머지 항목(name, school) 은 PK로 다시 실제 데이터가 존재하는 곳에 가서 찾은뒤 가져와야 한다.
  • 자 이렇게 하면, 결과적으로 인덱스를 두번 타게된다.
  • 다음과 같은 쿼리는 인덱스를 한 번만 탄다.
    • SELECT id FROM students WHERE grade = 3;
  • 여기서 위와 같은 상황에서 grade 만 가지고 인덱스를 여러번 타지 않고 한 번만에 데이터를 가져온다. 우리는 여기서 grade 에 대해 커버링 인덱스 를 만족한다고 이야기 한다.
  • 그러면 GROUPBY와 WHERE 절에서 동등 비교가 아닌 경우에는 어떠할까?
    • Group by의 경우 인덱스의 순서와 일치하기만 하면 된다.
    • WHERE 절이 동등비교가 아니면, 예를 들어 LIKE 검색으로 하는 경우에는 당연히 인덱스를 타지 않는다.
  • 참고로 위 예제에서 grade 를 통해 찾는 과정은 Non-Clustered 인덱스를, id(PK)를 통해 찾는 과정은 Clustered 인덱스를 통해 찾는다.
 

요약

📌
요약: Covering Index 란 쿼리를 하는데 있어 필요한 모든 데이터를 가지고 있는 인덱스를 칭한다.