2개의 컬럼으로 이루어진 결합인덱스가 있다고 할때
col1+col2..
col2 col1 rowid
110 A
110 B
111 A
111 B
111 C
112 A
112 B
113 B
114 A
다음과 같은 쿼리를 생각해보면
select * from tab1 where col1='A' and col2 between '111' and '113'
위의 경우처럼 col2이 인덱스 앞에 있을 경우 위의 쿼리는
col2를 111에서부터 113을 모두 스캔하여 그중 col1이 A인 것을 찾아내게 된다.
즉 인덱스스캔 7, 테이블 access는 2회
왜냐하면 옵티마이저나 dbms는 111과 113사이에 뭐가 있는지 알 수 없기 때문이다.
111.1이 있는지 112.2가 있는지 알 수 없기 때문에 between조건에 만족할때까지 읽게 되는 것이다.
그러나 인덱스가 저 반대로 만들어져 있을 경우 즉
col1 col2 rowid
A 110
A 111
A 112
A 114
B 110
B 111
B 112
B 113
C 111
똑같은 쿼리를 실행하게 되면 col1이 A인것만 인덱스 레인지 스캔을 하기 때문에
인덱스 스캔 4회 (col1이 B가 처음 나오는 것 까지 읽고 A인지 B인지 판단하므로..)
테이블 access 3회로 앞에 나온 인덱스를 사용할때 보다
훨씬 나은 속도를 보장해 준다.