MySQL covering index 가이드: 커버링 인덱스는 언제 도움이 될까
DB

MySQL covering index 가이드: 커버링 인덱스는 언제 도움이 될까


MySQL 인덱스를 공부하다 보면 covering index라는 표현을 자주 보게 됩니다. 처음에는 일반 인덱스와 뭐가 다른지 헷갈리지만, 실제로는 쿼리 성능을 꽤 크게 바꿀 수 있는 중요한 개념입니다.

이 글에서는 아래 내용을 정리합니다.

  • covering index가 무엇인지
  • 왜 성능에 도움이 되는지
  • 일반 인덱스와 무엇이 다른지
  • 어떤 경우에 특히 유리한지

핵심은 covering index는 인덱스만 읽어도 쿼리에 필요한 정보가 다 있는 상태라서, 추가 테이블 접근을 줄일 수 있다는 점입니다.

covering index란 무엇인가

covering index는 쿼리가 필요로 하는 컬럼이 모두 인덱스 안에 들어 있어서, MySQL이 굳이 원본 row를 다시 찾지 않아도 되는 경우를 말합니다.

예를 들어:

  • WHERE에 쓰는 컬럼
  • SELECT에 필요한 컬럼
  • ORDER BY에 필요한 컬럼

이 인덱스 안에서 모두 해결되면 커버링 인덱스 효과를 볼 수 있습니다.

왜 빠를 수 있을까

일반 인덱스는 찾는 기준만 빠르게 좁혀주고, 실제 컬럼 값을 얻기 위해 다시 테이블 row에 접근해야 할 수 있습니다.

반면 covering index는 인덱스 안에 필요한 정보가 다 있으므로:

  • 추가 row lookup 감소
  • I/O 감소
  • 읽기 속도 개선

효과를 기대할 수 있습니다.

즉, “찾기”와 “가져오기”를 인덱스 안에서 함께 처리하는 느낌에 가깝습니다.

언제 특히 유리할까

아래 같은 읽기 패턴에서 특히 유리합니다.

  • 자주 실행되는 조회 쿼리
  • 결과 컬럼 수가 적은 목록 조회
  • 정렬까지 함께 중요한 쿼리

즉, 큰 본문 데이터를 다 읽을 필요 없이 일부 컬럼만 자주 보는 경우에 잘 맞습니다.

무조건 만들면 좋을까

그렇지는 않습니다. 커버링 인덱스를 만들기 위해 컬럼을 많이 넣으면 인덱스가 커지고, 쓰기 비용도 늘 수 있습니다.

즉:

  • 읽기 속도 개선
  • 인덱스 크기 증가
  • 쓰기 비용 증가

사이에서 균형을 봐야 합니다.

일반 인덱스와 어떤 차이로 보면 좋을까

  • 일반 인덱스: 찾는 경로를 빠르게 만든다
  • covering index: 찾고 가져오는 것까지 인덱스 안에서 끝낼 수 있다

이렇게 이해하면 초반에 감이 잘 잡힙니다.

자주 하는 오해

1. 인덱스가 있으면 다 커버링 인덱스다

아닙니다. 필요한 컬럼이 모두 인덱스에 있어야 합니다.

2. covering index는 항상 최고다

읽기에는 좋을 수 있지만, 인덱스 크기와 쓰기 비용을 같이 봐야 합니다.

3. SELECT * 에도 covering index 효과를 기대할 수 있다

필요 컬럼이 너무 많으면 현실적으로 어렵습니다.

FAQ

Q. covering index는 어디서 가장 효과가 큰가

반복되는 읽기 쿼리와 작은 결과셋 조회에서 특히 좋습니다.

Q. 어떻게 확인할 수 있나

실행 계획과 실제 쿼리 패턴을 같이 보면서 판단하는 것이 좋습니다.

Q. 입문자는 무엇부터 이해하면 좋을까

일반 인덱스와 covering index 차이, 그리고 SELECT 컬럼 수가 왜 중요한지부터 이해하면 좋습니다.

먼저 읽어볼 가이드

검색 유입이 많은 핵심 글부터 이어서 보세요.