Database/SQL2009. 1. 22. 10:05
이런경험 있지 않던가?
분명 DB테이블에 Index 를 설정해놓은 컬럼인데...
어느순간 보니.. Index를 타지 않고..  테이블을 Full Scan 해버리는 상황...
뭐가 문제야 뭐가!!!  하며 hint를 줘보고, 별짓을 다해보는뎅....
쿼리 실행하면 4~5초는 기본이요~ 10~20초 까지 가게되다도면.. 뭐가 문제인지..
답답할때가 많다.

그런데.. 대부분의 경우 Index 설정이 되어있다면...  안탈리가없다...
문제는 바로 조건문쪽에 있을 확률이 높다.

조건에서 혹시 인덱스 설정한 값을 함수를 통해 변환하지는 않았는가?

내가 겪은 상황의 대부분은 이러했다..
특수한 경우를 제외하고는 인덱스로 설정한 값을 SELECT 조건문에서 변형을 하게되면
해당되는 Index를 타지 못하고 Full Scan 하게되는거다..

예를 들어 날짜 형식으로 지정된 Index가있는데.. 내가 비교하기 편하려고
지정된 컬럼을 TO_CHAR() 함수로 바꾸어서 값을 비교하게되면..
Index의 지정은 date형식인데.. 비교가 char 형식으로 바뀌게되면서
Full Scan을 하게 된다.

인덱스를 타지 않는경우!!
여러분들의 조건문을 한번 다시 살펴보길 바란다...
어딘가 변형을 가하지 않았는가??
Posted by 햇 님