Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

DBDBDEEP

IN 조건이 '='으로 해석될 수 있는지 본문

친절한 SQL 튜닝

IN 조건이 '='으로 해석될 수 있는지

Kihwane 2026. 5. 18. 10:55

BETWEEN IN-LIST 변경하면서 바와 같이 IN 조건을 '=' 동등시 있다는 점이 있다.

 

IN조건은 '=' 아니다.

 

select * from 고객별가입상품
where 고객 번호 = : cust_no
and 상품ID in ( ' NH00037 ' , ' NH00041 ' , ' NH00050 ' );

 

 

인덱스를 [상품ID+고객번호] 순으로 생성하면,

같은 상품은 고객번호 순으로 정렬된 상태로 하나(또는 연속된 두개) 리프 블록에 저장된다.

 

반면 고객번호 기준으로는 같은 고객번호가 상품 ID 따라 뿔뿔이 흩어진 아래와 같은 상태가 된다.

 

 

경우는 상품ID 조건절이 IN-LIST Iterator 방식으로 풀리는 것이 효과적이다.

(1234 멀리 떨어져 있기 때문)

 

select * from 고객별가입상품 where 고객번호 = :cust_no and 상품ID = ' NH00037 ' union all select * from 고객별가입상품 where 고객번호 = :cust_no and 상품ID = ' NH00041 ' union all select * from 고객별가입상품 where 고객번호 = :cust_no and 상품ID = ' NH00050 '

 

이걸 의미하는데 이렇게 하면 고객번호와 상품번호 모두 액세스 조건 된다.

 

IN 조건이 '=' 되려면 IN-LIST Iterator 풀려야만 한다.

그렇지 않으면 IN 조건은 필터 조건이다.

'친절한 SQL 튜닝' 카테고리의 다른 글

4.1 NL 조인  (0) 2026.05.18
LIKE/BETWEEN 조건 활용  (0) 2026.05.18
3.3.5 인덱스 선행 컬럼이 등치(=) 조건이 아닐 때  (0) 2026.05.18
3.3.3 액세스/필터 조건  (0) 2026.05.18
3.2.3 배치 I/O  (0) 2026.05.18