- Between 조건절로 INDEX를 탐색하였을때는 1번의 수직적 탐색이후 불필요한 리프 블록 탐색이 많다. 하지만 IN-List로 바꾸게되면 3번의 수직적탐색을하며 불필요한 리프 블록의 탐색을 줄일수있게된다.
■ BETWEEN 조건을 IN-List로 전환할 떄 주의사항
1. IN-List 갯수가 많을떄
- BETWEEN 조건을 IN-List조건으로 전환할떄는 IN-List 개수가 많지 않아야 한다는 것이다. IN-List 개수가 많아지면 대량의 수직적 탐색이 발생하게되고 BETWEEN 조건의 리프 블록을 많이 탐색하는 비효율보다 IN-LIst 조건의 브랜치 블록을 반복 탐색한는 비효율이 더 클 수 있다.
2. BETWEEN 조건의 범위가 좁을 경우
where 고객등급 between ' C' and 'D' and 고객번호 = 128
그림과 같이 둘사이에 놓인 인덱스 블록이 매우 소량인것을 볼수있다. 이럴때 BETWEEN을 IN-LIST로 변환하면 효과가 전혀 없거나 수직적 탐색 때문에 오히려 I/O가 많이 발생한다.
■ 정리
정리하면, BETWEEN 조건 때문에 인덱스를 비효율적으로 스캔하더라도 블록 I/0 측면에 서는 대개 소량에 그치는 경우가 많다. 인덱스 리프 블록에는 테이블 블록과 달리 매우 많은 (8KB 블록 기준으로 대략 수백 개) 데코」三가 담기기 때문이다. 게다가 IN—List 개수가 많으면 수 직적 탐색 과정에서 이미 많은 블록을 읽게 된다. 데이터 분호 및 수직적 탐색 비용을 따져보지 않고 BETWEEN을 IN-List로 변환하는 잘못을 하지 않기를 바란다.