최대한 Index를 타게 하자.
oracle
2010. 10. 14. 09:38
최근 쿼리속도가 너무 느려 쿼리를 살펴봤더니
인덱스를 타야하는 컬럼인데도 불구하고 인덱스를 타지 않았다.
이유인즉슨, 쿼리문에 인덱스컬럼에 변형을 가하면
오라클이 쿼리수행계획에서 인덱스를 타지않는다는 것이었다.
그래서 컬럼 그대로 쿼리문을 작성했더니 인덱스를 타더랬다.
쿼리문에서 컬럼에 변형을 가하는경우는 주로 substr()과 같은 함수이다.
이 함수를 컬럼에 쓸때는 인덱스 컬럼인지 주의깊게 살펴보자.
* 예제 - date 컬럼이 인덱스인 경우
SELECT date, flag FROM TABLE WHERE substr(date, 1, 10) <= '2010-10-14';
-> date컬럼이 인덱스라면, substr로 변형이 일어나 index를 타지 않게되어 쿼리속도가 저하된다.
SELECT date, flag FROM TABLE WHERE date <= '2010-10-14 13:15:10';
-> 차라리 이렇게 인덱스 컬럼을 원형대로 써주고 비교하는 부분을 인덱스컬럼 원형에 맞게 변형해줘야
인덱스를 탄다.
'oracle' 카테고리의 다른 글
Oracle Index (0) | 2013.01.10 |
---|---|
UNION, UNION ALL (0) | 2010.05.27 |