쿼리 최적화 - 작은 테이블이 큰 테이블을 제어합니다(In, Exists 차이점).
===============
본고는 작은 시계 구동 큰 시계(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 크기
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.