MySQL 에서 in 과 exists 의 차이 점 에 대한 상세 한 설명

3997 단어 MySQLinexists
미리 준비 하 다
여러분 의 학습 편 의 를 위해 저 는 이 안에 표 두 장 을 만 들 고 데 이 터 를 추가 합 니 다.
과일 시계 한 장,공급 업 체 시계 한 장.
과일 시계
f_id
f_name
f_price
a1
apple
5
a2
appricot
2
b1
blackberry
10
b2
berry
8
c1
cocount
9
공급 업 체 표
s_id
s_name
101
무지개
102
월 마 트
103
까 르 푸
104
화 윤 만 가
우 리 는 이 두 장의 시계 로 시범 을 보일 것 이다.
뭐 공부 해요?exists키워드 뒤의 매개 변 수 는 임의의 하위 조회 입 니 다.시스템 은 하위 조회 에 대해 연산 을 하여 줄 로 돌아 가 는 지 여 부 를 판단 합 니 다.만약 에 적어도 한 줄 로 돌아 가면exists의 결 과 는true입 니 다.이때 외층 의 조회 문 구 는 조회 합 니 다.하위 조회 가 줄 을 되 돌려 주지 않 으 면exists결 과 는false이 며,이때 외부 문 구 는 조회 하지 않 습 니 다.
주의해 야 할 것 은 우리 의 하위 조회 가SELECT NULL일 때 MYSQL 은 여전히 그것 이True라 고 생각 합 니 다.
在这里插入图片描述
在这里插入图片描述
뭐 공부 해요?
in 키 워드 를 하위 검색 할 때 내부 검색 어 는 하나의 데이터 열 만 되 돌려 줍 니 다.이 데이터 열의 값 은 외부 검색 어 에 비교 작업 을 제공 합 니 다.
in 키 워드 를 테스트 하기 위해 과일 시계 에 s 를 넣 었 습 니 다.id 일렬
과일 시계
f_id
f_name
f_price
s_id
a1
apple
5
101
a2
appricot
2
103
b1
blackberry
10
102
b2
berry
8
104
c1
cocount
9
103
在这里插入图片描述
exists 와 in
in 과 exists 는 도대체 어떤 차이 가 있 습 니까?그럼 언제 in 을 사용 해 야 합 니까?언제 exists 를 사용 해 야 합 니까?
우 리 는 일단 구결 을 기억 하고 자세 한 이 야 기 를 하 자!""외부 조회 표 가 하위 조회 표 보다 작 으 면 exists 를 사용 하고 외부 조회 표 가 하위 조회 표 보다 크 면 in 을 사용 합 니 다.만약 에 외부 와 하위 조회 표 의 차이 가 많 지 않 으 면 어느 것 을 사용 하 는 것 을 좋아 합 니까?"
나 는 네가 이미 알 아 차 렸 다 고 생각한다.fruits 표 데이터 가 매우 클 때 in 을 사용 하기에 적합 하지 않다.왜냐하면 그것 은 최대 fruits 표 데 이 터 를 한 번 씩 옮 겨 다 닐 수 있 기 때문이다.
예 를 들 어 suppliers 표 는 10000 개의 기록 이 있 고 fruits 표 는 1000000 개의 기록 이 있 으 면 최대 10000*1000000 번 을 옮 겨 다 닐 수 있 고 효율 이 매우 떨어진다.
또한 suppliers 표 는 10000 개의 기록 이 있 고 fruits 표 는 100 개의 기록 이 있 으 면 최대 10000*100 번 을 옮 길 수 있 으 며 옮 겨 다 니 는 횟수 가 크게 줄 어 들 고 효율 이 크게 향상 된다.
그러나 suppliers 표 는 10000 개의 기록 이 있 고 fruits 표 는 100 개의 기록 이 있 습 니 다.그러면 exists()는 10000 번 을 실행 하 는 것 이 낫 습 니 다.in()을 사용 하여 10000*100 번 을 옮 겨 다 니 는 것 이 낫 습 니 다.in()은 메모리 에 옮 겨 다 니 는 것 이 고 exists()는 데이터 베 이 스 를 조회 해 야 하기 때 문 입 니 다.우 리 는 조회 수가 라 이브 러 리 에 소모 되 는 성능 이 더욱 높 고 메모리 가 빠 른 것 을 알 고 있 습 니 다.
따라서 우 리 는 구결 만 기억 해 야 한다."외층 조회 표 가 하위 조회 표 보다 작 으 면 exists 를 사용 하고 외층 조회 표 가 하위 조회 표 보다 크 면 in 을 사용 하 며 외층 과 하위 조회 표 의 차이 가 많 지 않 으 면 어느 것 을 사용 하 는 것 을 좋아 합 니까?"
5.not exists 와 not in
在这里插入图片描述
exists 와 마찬가지 로 suppliers 의 id 색인 을 사 용 했 습 니 다.exists()의 실행 횟수 는 fruits.length 이 고 exists()의 결과 집합 을 캐 시 하지 않 습 니 다.
在这里插入图片描述
왜냐하면 not in 은 실질 적 으로!= and != ・・・,왜냐하면!=색인 을 사용 하지 않 기 때문에 not in 은 색인 을 사용 하지 않 습 니 다.
왜 not in 은 색인 을 사용 하지 않 습 니까?
우 리 는 100 만 데이터 가 있다 고 가정 합 니 다.sid 는 0 과 1 두 개의 값 만 있 습 니 다.색인 을 이용 하여 우 리 는 먼저 색인 파일 을 읽 은 다음 에 2 분 에 찾 아서 해당 하 는 데이터 디스크 지침 을 찾 은 다음 에 읽 은 지침 에 따라 디스크 에 대응 하 는 데 이 터 를 읽 고 결과 집합 50 만 위안 에 영향 을 줍 니 다.이런 상황 은 전체 표 에서 어느 것 이 빨리 나타 나 는 지 직접 스 캔 하 는 것 과 쉽게 볼 수 있 습 니 다.
하면,만약,만약...id 필드 는 유 니 크 입 니 다.색인 을 사용 합 니 다.
만약 당신 이 반드시 색인 을 사용 해 야 한다 면,force index 를 사용 할 수 있 지만,효율 은 개선 되 지 않 을 것 이 며,일반적으로 더욱 느 릴 것 이다.
색인 을 합 리 적 으로 사용 하 는 것 은 Cardinality 가 중요 한 지표 로 너무 작 으 면 만 들 지 않 은 것 과 다 르 지 않 고 공간 을 낭비 하 는 것 이다.
따라서 suppliers 와 fruits 의 크기 에 상 관 없 이 not exists 를 사용 하 는 효율 이 높다.
MySQL 에 있 는 in 과 exists 의 차이 점 에 대한 자세 한 설명 은 여기까지 입 니 다.MySQL in 과 exists 의 차이 점 에 대해 서 는 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 읽 어 주시 기 바 랍 니 다.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기