by 열심열심 [2019.07.18 16:31:08]
바인드 변수값 in ( select aa from t where a=1) 일때와
'바인드변수값' = select aa from t where a=1) 일 때의 시간차이가 수 백 수천 배나 차이 나는데
단순 in 과 = 차이 인지 바인드 깂 비교때문에 차이가 난건지 궁금하네요
위에 내용만 가지고는 정확치 않지만 수백수천배 차이라면 둘중 하나는 인덱스를 이용하지 못하는 sql로 보입니다
수정합니다.
바인드 변수 값 = 이냐IN이냐 차이에 따라 수백 수천배 납니다. 0.1초도 안걸리는게 IN절타면 100초가 넘어버립니다.
조건절 컬럼이 인덱스 걸려 있는데,
바인드 변수 자료형과 컬럼 자료형이 달라서 인덱스를 못쓰고 풀 테이블 억세스 한게 아닐까요?
실행계획을 비교해보세요~
=으로 했을 때는 결과가 단건일거라 옵티마이저가 판단할 수 있어 우선 엑세스 조건으로 실행하거나 선두조인 테이블로 실행계획을 잡았을 거라 추측합니다.
or col1 in ( 1,2) and '바인드변수' in(서브쿼리) 형태인데
DBA 플랜 분석 말로는 IN 에 IN 형태라 서브쿼리로 사용되지 않아 메인 Table 조인 후에 필터 처리되서 오래 걸렸다고 하는데
오라클의 특징인가요? 위에 말씀처럼 2번째 IN 서브쿼리에선 하나의 값만 넘어오는 조건은 맞다고 합니다.