인덱스 구성 (상품 종류, 이름) 으로 구성되어 있고


상품 종류는 Enum ('팬티', '브라자', '티팬티') 이런식으로 테이블이 정의되어 있고


select * from 주문 목록

where 이름 = '미카사 아커만'


1~5번 리프노드에는 팬티가 저장되어 있고

6~10번 리프노드에는 티팬티가 저장되어 있어


3번 리프노드에 (팬티, 에렌 예거)

8번 리프노드에는 (티팬티, 미카사 아커만)이 저장이 존재하면


위와 같은 쿼리를 날리면 옵티마이저는 고유한 한 값을 찾아야 하기 때문에 1번 리프 노드를 먼저 탐색함 거기서 팬티라는 고유한 값을 찾고


팬티에는 조건을 만족시키는 값이 없는걸 알기 때문에 팬티의 마지막 리프노드에서 다른 고유한 값이 있는지 체크할 필요가 있음


그리고 6번 리프노드를 탐색해 티팬티라는 고유한 값을 찾은 다음 8번 리프노드에서 티팬티, 미카사 아커만이라는 값을 찾고 티팬티의 마지막 리프노드 블록도 탐색해야 함


여기서 동작의 핵심은 리프노드를 직접 탐색해 고유한 값을 찾고 그 고유한 값으로 인덱스 검색 후 다시 고유한 값을 찾고 이런 과정의 반복임


그니까 즉 Enum이던 char던 varchar던 상관 없이 옵티마이저는 통계 정보만 의존하는게 아닌 직접 탐색해 고유한 값의 시작 위치를 알고 검색함


이게 인덱스 스캡 스캔임