인덱스 스캔 효율성은 인덱스 컬럼을 조건절에 모두 등치(=) 조건으로 사용할 때 가장 좋다. 리프 블록을 스캔하면서 읽은 레코드는 하나도 걸러지지 않고 모두 테이블 액세스로 이어지므로 인덱스 스캔 단계에서 비효율은 전혀 없다. 인덱스 컬럼 중 일부가 조건절에 없거나 등치 조건이 아니더라도, 그것이 뒤쪽 컬럼일 때는 비효율이 없다.
반면, 인덱스 선행 컬럼이 조건절에 없거나 부등호, BETWEEN, LIKE와 같은 범위검색 조건이면 인덱스를 스캔하는 단계에서 비효율이 생긴다.
BETWEEN을 IN-LIST로 전환
범위검색 컬럼이 맨 뒤로 가도록 인덱스를 설정하면 좋겠지만 운영 시스템에서 인덱스 구성을 바꾸기란 쉽지 않다.
이럴 때 BETWEEN 조건을 IN-LIST로 바꿔주면 큰 효과를 얻는 경우가 있다.
만약에, IN-LIST 항목이 많아지면 사용하기가 곤란하다. 이럴 경우에는 NL 방식의 조인문이나 서브쿼리로 작성해주면 된다.
추가적으로 IN-LIST 안에 항목이 너무 많아지면 Depth가 비효율적으로 깊어지기 때문에 전환시 주의해야한다.