쿼리 튜닝.. 0 8 1,258

by 김수진 [SQL Query] [2011.04.11 17:17:36]


안녕하세요.

질문을 하기 위해 찾아오게 된게 조금 죄송하기도 하지만 혹시나 도움이 되어줄수 있으신분의

답변 좀 부탁드립니다.


테이블을 셀렉트 하면서  where 절을 다음과 같은 형태로 쓰고 있습니다.

DECODE 를 사용하고 있는데요 #AA# 이부분에 null 일 설정되게 되면 '%%' 라이크 검색하게되어 속도가 많이 늦어지는것 같습니다. null 이 들어가면 where 절이 사실 필요없게 되는건데 어떻게 수정가능할까요?? 

where column1 like DECODE(#AA#,    NULL,'%%', '%' || #AA# || '%')

그럼 답변 기다리겠습니다 ~

by 솔밭 [2011.04.11 17:45:36]
where column1 like DECODE(#AA#, NULL, column1, '%' || #AA# || '%')
그런데 DECODE 안에 NULL 비교가 가능한지는 저도... ^^

by camela [2011.04.11 17:45:44]
그냥 쓰셔도 괜찮을 듯 한데요.
그 조건이 있든 없든 테이블 스캔할걸로 생각되는데요.
입력값이 null 이 아니라도 인덱스 타지 못하고 테이블 스캔하겠네요.
null 이 아닌 값이 입력되더라도 앞에 % 가 붙어서 인덱스 못 타니까요.

위 조건은 아래와 같으므로 보기 쉽게 변경하시는게...
where column1 like '%' || #AA# || '%'

by 김수진 [2011.04.11 17:46:43]
넵 감사합니다 ~

by 마농 [2011.04.11 17:56:24]
Decode 는 안 써도 결과는 동일할것 같습니다.
WHERE column1 LIKE '%' || #AA# || '%'

라이크 '%%' 때문에 느린것 맞나요?
검색결과가 많아서 느려진거 아닌가요?

아예 쿼리를 따로 분리하시는 방법도 있습니다.

by 김수진 [2011.04.12 09:05:45]
where column1 like DECODE(#AA#, NULL,'%%', '%' || #AA# || '%')

이 문장에서 #AA# 값에 널이 들어갔을때 처리되는 시간과
이문장을 아예 빼 버렸을때 속도가 많이 차이가 나더라구요
그래서 like 검색 때문에 느려진게 아닌지라는 의문이 들어서..

by 마농 [2011.04.12 10:00:33]
두 쿼리의 실행계획을 비교해 보세요.
아마 실행계획에 차이가 있지 않을까 생각됩니다.
단순 Like 때문에 느린거라기 보다는 그로 인한 실행계획의 변화때문이 아닐까 생각됩니다.
조건절을 빼야 빠르다면 위에서 언급한대로 쿼리를 두개로 분리하여 따로 실행하도록 하는것이 좋을듯 합니다.

by camela [2011.04.12 10:10:25]
극히 적은 경우지만 데이터가 많아서 decode 함수조차 영향을 줄 수도 있다고 생각되네요.

by 김수진 [2011.04.12 14:28:22]
마농 // 넵.. 감사합니닷~ 확인을 해봐야겠네요
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입