covering index

짱구·2023년 1월 19일
0

database

목록 보기
3/7

커버링 인덱스란?

  • 테이블에 접근하지 않고 인덱스 데이터만 반환(응답)!
  • mysql에서는 PK가 clustered Index이기 때문에 이 조건에 매우 유리!
    • 모든 인덱스 테이블에 id(pk)가 존재하기에 커버링 인덱스에 매우 유리!

인덱스가 있을 경우 순서

예시

SELECT 나이, id FROM 회원 WHERE 나이 < 30

일반적인 경우

순서 -> 나이 index를 조회 -> 나이가 30 이하인 id 조회 -> id값 반환
-> 반환된 id값으로 member Table 조회 -> 반환

커버링 인덱스의 경우

순서 -> 나이 index를 조회 -> 나이가 30 이하인 id 조회 -> id값 반환

  • 멤버 테이블 데이터 블럭에 접근하지 않아 빠르게 데이터 처리가 일어남

응용예시

페이지네이션 예시

나이가 30 이하인 회원의 이름을 2개만 조회 // 나이가 30 이하인 회원이 50,000명이 넘는다.
※ index = age

  • 일반적인 인덱스 사용 -> 50,000번의 데이터 블럭 access가 일어남 -> Random I/O가 50,000건 발생
  • 커버링 인덱스 사용 -> (age<30) => 커버링 인덱스 동작 -> 테이블에서 50,000개의 데이터중 2개만 가져옴 -> 데이터 블럭 access가 2건 발생 -> Random I/O가 2건 발생

code

with covering as (
SELECT id
FROM member
WHERE age < 30
LIMIT 2
)

SELECT 이름
FROM 회원 INNER JOIN covering on member.id = covering.id

QueryDSL로 Covering Index 구현

Covering Index 자세한 정보 보기

이미지 출처 : 패스트캠퍼스

profile
코드를 거의 아트의 경지로 끌어올려서 내가 코드고 코드가 나인 물아일체의 경지

0개의 댓글