커버링 인덱스
커버링 인덱스는 페이지네이션을 최적화하기 위한 기법입니다.
커버링 인덱스의 기본 아이디어는 검색 조건이 인덱스에 부합하다면, 테이블에 바로 접근하는 것보다 인덱스를 통해 접근하는 것이 빠르지 않을까?입니다
즉 테이블에 접근하지 않고 바로, 인덱스로만 데이터 응답을 내려주는 것입니다
인덱스에 필요한 모든 정보를 포함하여 데이터에 대한 접근과 검색 속도를 향상시키는거죠.
커버링 인덱스는 인덱스에 모든 필요한 컬럼이 포함되어 있기 때문에 데이터 테이블에 직접 접근하지 않고도 필요한 정보를 인덱스에서만 가져올 수 있습니다
흐름 설명
위의 테이블에 SELECT 나이 FROM 회원 WHERE 나이 < 30
쿼리를 날리는 상황을 가정해 봅시다
조회가 끝나면, 19와 27이 조회 되었고, 인덱스를 따라 어떤 유저인지 파악 할 수 있겠죠
하지만, 우리는 디비의 성능은 결국 랜덤 I/O를 줄여야하는 것이므로 커버링 인덱스로 페이지네이션을 최적화 하고 싶습니다
게다가 우리가 자주 사용하는 MySQL에서는 PK가 클러스터 인덱스이기때문에 커버링 인덱스에 이점을 가지고 있어서 더욱 사용하고 싶습니다
with 커버링 as (
SELECT id
FROM 회원
WHERE 나이 < 30
LIMIT 2
)
SELECT 이름
FROM 회원 INNER JOIN 커버링 on 회원.id = 커버링.id
이 때 우리는 위와 같은 쿼리를 작성합니다
일단 id로 나이 값을 찾아온 후, 원본 테이블을 조회 하지 않고(커버링 되었으므로) 바로 이름을 조회 하게 됩니다
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
728x90
'DEV > Backend' 카테고리의 다른 글
Fan Out On Read (Pull Model) (0) | 2023.06.09 |
---|---|
Fan Out On Write (Push Model) (0) | 2023.06.09 |
커서 기반 페이지네이션 (0) | 2023.06.09 |
오프셋 기반 페이지네이션 (0) | 2023.06.09 |
페이지네이션 (0) | 2023.06.09 |