튜닝에서 IN과 = 차이가 심하나요? 0 6 1,130

by 열심열심 [2019.07.18 16:31:08]


바인드 변수값 in ( select aa from t where a=1) 일때와 

'바인드변수값' = select aa from t where a=1) 일 때의 시간차이가 수 백 수천 배나 차이 나는데 

단순 in 과 = 차이 인지 바인드 깂 비교때문에 차이가 난건지 궁금하네요 

by 우리집아찌 [2019.07.18 16:52:15]
위에 내용만 가지고는 정확치 않지만
수백수천배 차이라면 둘중 하나는 인덱스를 이용하지 못하는 sql로 보입니다

 


by 열심열심 [2019.07.18 16:54:29]

수정합니다. 

바인드 변수 값 = 이냐IN이냐 차이에 따라 수백 수천배 납니다. 0.1초도 안걸리는게 IN절타면 100초가 넘어버립니다. 


by 생각 [2019.07.18 16:54:10]

조건절 컬럼이 인덱스 걸려 있는데,

바인드 변수 자료형과 컬럼 자료형이 달라서 인덱스를 못쓰고 풀 테이블 억세스 한게 아닐까요?


by 소주쵝오 [2019.07.18 16:58:30]

실행계획을 비교해보세요~


by jkson [2019.07.18 17:54:08]

=으로 했을 때는 결과가 단건일거라 옵티마이저가 판단할 수 있어 우선 엑세스 조건으로 실행하거나 선두조인 테이블로 실행계획을 잡았을 거라 추측합니다.


by 열심열심 [2019.07.19 09:11:00]

or col1 in ( 1,2) and '바인드변수' in(서브쿼리) 형태인데 

DBA 플랜 분석 말로는 IN 에 IN 형태라 서브쿼리로 사용되지 않아 메인 Table 조인 후에 필터 처리되서 오래 걸렸다고 하는데 

오라클의 특징인가요? 위에 말씀처럼 2번째 IN 서브쿼리에선 하나의 값만 넘어오는 조건은 맞다고 합니다. 

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