본문 바로가기

ORACLE

EQUAL이 결합인덱스에 미치는 영향

 

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회로 앞에 나온 인덱스를 사용할때 보다


훨씬 나은 속도를 보장해 준다.