쿼리 최적화 - 작은 테이블이 큰 테이블을 제어합니다(In, Exists 차이점).

3445 단어
Mysql 시리즈 기사 홈 페이지
===============
본고는 작은 시계 구동 큰 시계(In, Exists 차이)를 실제 예로 설명할 것이다.
1 데이터 준비
1.1 테이블, 함수, 저장 프로세스 만들기
이 문장의 1-7단계를 참조하여 8단계를 실행하지 않도록 주의하십시오
1.2 데이터 삽입
이제 8단계를 수행하겠습니다.
1.2.1 Department 테이블에 100개의 레코드 삽입
CALL insert_dept(1000, 100)

1.2.2 Employee 테이블에 100000개의 레코드 삽입
CALL insert_employee(100000000, 100000);

2 테스트
2.1 모든 Employee 정보를 조회하려면 다음과 같이 하십시오. Employee의 deptid가 Department 테이블에 있음
Case#1: IN
SELECT * FROM employee WHERE dept_id IN (SELECT id FROM department);

결과: 내 본기에서 수십 차례 테스트를 했는데 대략 120-130ms의 시간이 걸렸다
Case#2: EXISTS를 사용한 작업
SELECT * FROM employee e WHERE EXISTS (SELECT 1 FROM department d WHERE e.dept_id = d.id);

결과: 내 본기에서 수십 차례 테스트를 했는데 대략 350-370ms의 시간이 걸렸다
2.2 모든 Department 정보를 조회할 때: 최소한 하나의 Employee 기록이 있는 deptid 대응 Department (또는: 이 부서 아래에 최소한 하나의 직원 기록이 있음)
Case#3: EXISTS를 사용한 작업
SELECT * FROM department d WHERE EXISTS (SELECT 1 FROM employee e WHERE d.id = e.dept_id);

결과: 내 본기에서 수십 차례 테스트를 했는데 대략 4-6ms의 시간이 걸렸다
Case#4: IN
SELECT * FROM department WHERE id IN (SELECT dept_id FROM employee);

결과: 내 본기에서 수십 차례 테스트를 했는데, 대략 50--55ms의 시간이 걸렸다
2.3 분석 및 요약
Case #1, #2에서 Employee는 큰 시계, Department는 작은 시계로 IN(Department)을 사용하면 효과가 비교적 좋다(대개 EXISTS 시간의 3분의 1 정도) ======> IN 뒤에 작은 시계를 따라간다~
Case #3, #4에서 Employee는 큰 시계, Department는 작은 시계로 EXISTS(Employee)를 사용하면 효과가 비교적 좋다(대략 IN시간의 10분의 1로 한다) =====>EXISTS 뒤에 큰 시계가 따라간다~
기억: in 뒤에 작은 시계 ~ EXISTS 뒤에 큰 시계 ~ ~ ~ ~ IN 이 EXISTS 단어보다 짧기 때문에 (더 작다), EXISTS 단어가 IN보다 더 길기 때문이다 (더 크다)
2.4 진일보한 분석
왜 Case#1이 Case#2보다 우수한지, Case#3이 Case#4보다 우수한지 도대체 왜,,,,TODO가
참고할 수 있는 기사:https://www.cnblogs.com/beijingstruggle/p/5885137.html
3 결론
작은 시계 구동 큰 시계
IN 작음 EXISTS 크기

좋은 웹페이지 즐겨찾기