Book 테이블에
category 칼럼
au.thor 칼럼(작가/ 식별성 높음 /동명이인 가능)가 있습니다.
Book 테이블은 500만개
카테고리는 총 20개로 가정합니다.
select * from book where category = ? and a.uthor = ?
인덱스
A (category)
B (a.uthor)
C (category, a.uthor)
D (a.uthor, category)
이 쿼리에 대한 인덱스 선택의 문제입니다.
1. 해당 쿼리 기준으로
C(category, a.uthor)와
D(a.uthor, category)의
인덱스 동작의 차이를 설명하세요.
정답 : 동등조건 exact match로 속도 차이 거의 없음
읽어야할 row수 동일
2. 해당 쿼리 기준
가장 느린 인덱스를 선택하세요.
정답 A 카디널리티 낮고 추가조건 작가=?으로 랜덤io 폭증
3. 해당 쿼리 기준
B (a.uthor)와 D (a.uthor, category) 인덱스 동작 차이를 설명하세요.
정답 : 동명이인이 있는 케이스에서
B는 카테고리 값 관계없이 항상 랜덤io
D는 인덱스 단에서 필터링되어 카테고리 일치만 랜덤 io
4.
select * from book category = ? and a.uthor like '%단어%' 로 바뀐다면
가장 빠른 인덱스를 선택하세요.
정답 : (카테고리, 작가)
카테고리로 범위 좁히고 작가는 그 안에서 레인지 스캔
5. select * from book a.uthor like '%단어%' 로 바뀐다면
가장 빠른 인덱스를 선택하세요.
정답 : (작가)
인덱스 풀 스캔으로 작동(테이블 풀스캔보다 빠름)
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
6. select * from book where a.uthor = ? 쿼리에서
C (category, au.thor) 인덱스 동작 방식을 설명하세요.
정답 : Index full scan(인덱스 리프노드를 처음부터 끝까지 읽고)
작가가 일치할 때만 랜덤 io