where 조건에서 decode 이용하여 all 조건사용할때 like 와 차이점? 0 4 1,983

by 아라온 [SQL Query] where decode like all검색 콤보 [2019.10.21 10:07:36]


A.png (29,475Bytes)
B.png (30,996Bytes)

안녕하세요. 오랜만에 구루비에 질문을 올리게 되었습니다.

물론 이슈가 생긴부분은 해결을 한 상태이긴합니다만 차이점을 몰라서 문의를 드립니다.

A) AND    AD.ENV_MAJOR_GBN  = DECODE(V_APPR_TYPE, NULL, AD.ENV_MAJOR_GBN, V_APPR_TYPE)

B) AND    AD.ENV_MAJOR_GBN  LIKE V_APPR_TYPE || '%'

여기 두가지 쿼리가 있습니다.
물론 PL/SQL Developer에서 실행하면 두 쿼리모두 아주 빠른속도로 결과가 나오구요.
그런데 UI(asp.net)에서 실행하면 A쿼리는 아주느린(1분이상) 결과를 주고 B쿼리는 아주빠른(1초내)결과를 주고 있습니다.
두 쿼리는 모두 같은일을 하고 있구요.
코스트 확인결과 차이가 좀 있습니다만 제가 코스트활용을 인덱스를 이용하게는 할수 있지만 이렇게 태웠을때 어떻다 이렇게 해석은
지식이 부족하여 고수님들의 의견을 묻습니다.

코스트화면을 같이 첨부하겠습니다.

A) AND    AD.ENV_MAJOR_GBN  = DECODE(V_APPR_TYPE, NULL, AD.ENV_MAJOR_GBN, V_APPR_TYPE)

B) AND    AD.ENV_MAJOR_GBN  LIKE V_APPR_TYPE || '%'

 

 

by jkson [2019.10.21 10:26:42]

질문1) ENV_MAJOR_GBN 컬럼이 인덱스 컬럼인가요?

질문2) ENV_MAJOR_GBN 컬럼이 NULLABLE 컬럼인가요?


by 아라온 [2019.10.21 10:42:02]

ENV_MAJOR_GBN은 인덱스에 포함된 컬럼입니다.

NOT NULL 이구요.


by jkson [2019.10.21 11:26:56]

결합인덱스인가요. 단일인덱스인가요? 

결합인덱스라면 선두컬럼인지..

컬럼타입은 무엇인지

좀더 다양한 정보가 있어야 다른 분들도 고민해보실 것 같네요.

화면단과 DB툴에서 차이는 보통

파라메터값이 이상하게 들어갔거나, 파라메터타입이 컬럼타입과 안 맞거나.. 뭐 그런 경우인데..

추측이 안 되네요.

LIKE 검색으로는 잘 된다는 걸 보아서는 파라메터는 잘 들어간 것 같고..

 


by 마농 [2019.10.22 08:43:37]

1. 만약.
단일 테이블에 대해서 위 두가지 조건으로 비교한다면
B 는 조건값 유무에 상관없이 인덱스를 타게 되고
A 의 경우엔 해당 항목이 인덱스 항목이고 not null 항목이라는 전제가 있으면
조건값이 들어오는지 안들어 오는지에 따라 실행계획이 분리될 수 있습니다.
조건값이 들어오면 인덱스 스캔
조건값이 안들어오면 풀 스캔

2. 하지만.
지금은 여러 테이블을 조인하고 조건도 다양할 것으로 생각됩니다.
해당 조건 한줄만 가지고 판단 할 수 있는 문제가 아닙니다.
전체 쿼리를 보고 판단해야 합니다.
실행계획을 비교해 보면 테이블들을 읽는 순서가 다릅니다.
순서가 왜 달라졌을까를 생각해야 합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입