sql 에서 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 보다 빠르다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
깊이 중첩된 객체를 정확히 일치 검색 - PostgreSQL목차 * 🚀 * 🎯 * 🏁 * 🙏 JSON 객체 예시 따라서 우리의 현재 목표는 "고용주"사용자가 입력한 검색어(이 경우에는 '요리')를 얻고 이 용어와 정확히 일치하는 모든 사용자 프로필을 찾는 것입니다. 즐거운 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.