안녕하세요.
최근 쿼리 성능이 바인드 변수에 따라 차이가 나는 걸 발견하고 여러가지 확인을 해보다 풀리지 않는 것이 있어
글을 쓰게 됐습니다.
SQL성능이 바인드 변수의 값에 따라 차이가 많이 나서 실행계획을 확인해봤더니,
실행계획은 동일했습니다. 그런데 속도차이가 약 100배 정도 차이가 나더라고요.
실제 쿼리는 아래보다 훨씬 복잡하지만, 입력되는 바인드 변수에 따라 변경되는 부분은 아래와 같습니다.
select a.*
from test a
where a.col1 = decode(:bind1, '2', decode(:bind2, 'A', a.col1, rtrim(:bind3)),a.col1)
and a.col2 = a.col2;
이런 식의 쿼리고,
where 조건절인 a.col1 = decode(:bind1, '2', decode(:bind2, 'A', a.col1, rtrim(:bind3)),a.col1)가
유입되는 바인드 변수에 따라 a.col1=a.col1 이 되는 경우는 처리속도가 100msec이하인데,
a.col1=rtrim(:bind3) 인경우에는 처리속도가 7~8초를 훌쩍 넘기게 됩니다.
a.col1의 경우 인덱스컬럼은 아닙니다.
이 두가지경우의 실행플랜을 보니 실행플랜은 동일한데 처리속도가 너무 달라져서 왜 그런건지 궁금합니다.
또, 이렇게 달라지는 쿼리 속도를 빠르게 튜닝하려면 어떻게 해야할까요..?
고견 부탁드립니다!