sql 에서 in 과 exists 의 구별 효율 문제 전환

in 과 exists
in 은 겉모습 과 내 표를 hash 로 연결 하고 exists 는 대외 표를 loop 순환 하 며 매번 loop 순환 을 통 해 내 표를 조회 합 니 다.
그동안 exists 가 in 보다 효율 이 높다 는 주장 은 부정 확 하 다.만약 조회 한 두 표 의 크기 가 비슷 하 다 면, in 과 exists 를 사용 하 는 것 은 차이 가 크 지 않다.
 
만약 에 두 개의 표 중 하 나 는 비교적 작고 하 나 는 큰 표 라면 하위 조회 표 는 큰 exists 를 사용 하고 하위 조회 표 는 작은 in 을 사용한다.
예 를 들 면:
시계 A (작은 시계), 시계 B (큰 시계) 1:
 
select * from A where cc in (select cc from B)

 
효율 이 낮 아 A 표 에 있 는 cc 열 색인 을 사 용 했 습 니 다.
 
select * from A where exists(select cc from B where cc=A.cc)

 
효율 이 높 아 B 표 의 cc 열 색인 을 사 용 했 습 니 다.
 
반대로 2:
 
select * from B where cc in (select cc from A)

 
효율 이 높 아 B 표 의 cc 열 색인 을 사 용 했 습 니 다.
 
select * from B where exists(select cc from A where cc=B.cc)

 
효율 이 낮 아 A 표 에 있 는 cc 열 색인 을 사 용 했 습 니 다.
 
 
not in 과 not exists
검색 어 에 not in 을 사용 하면 내외 표 가 모두 표 스 캔 을 하고 색인 을 사용 하지 않 습 니 다.
not extsts 의 하위 조 회 는 표 의 색인 을 사용 할 수 있 습 니 다.그래서 그 시계 가 크 든 not exists 를 사용 하 는 것 이 not in 보다 빠르다.

좋은 웹페이지 즐겨찾기