• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 1. 최적화 개요
    2. SQL문 최적화
    1. SELECT문 최적화
    1. SELECT문 속도
    2. MySQL WHERE절 최적화 방법
    3. range 최적화
    4. 인덱스 병합 최적화
    5. 엔진 조건문 푸시 다운 최적화
    6. 인덱스 조건문 푸시 다운 최적화
    7. 인덱스 확장의 사용
    8. IS NULL 최적화
    9. LEFT JOIN과 RIGHT JOIN 최적화
    10. Nested Loop 조인 알고리즘
    11. 중첩 된 결합의 최적화
    12. 외부 조인의 단순화
    13. Multi-Range Read 최적화
    14. Block Nested Loop 조인과 Batched Key Access 결합
    15. ORDER BY 최적화
    16. GROUP BY 최적화
    17. DISTINCT 최적화
    18. 서브 쿼리의 최적화
    19. LIMIT 쿼리의 최적화
    20. 풀 테이블 스캔을 피하는 방법
    2. DML문 최적화
    3. 데이터베이스 권한 최적화
    4. INFORMATION_SCHEMA 쿼리 최적화
    5. 기타 최적화 Tips
    3. 최적화 및 인덱스
    4. 데이터베이스 구조의 최적화
    5. InnoDB 테이블의 최적화
    6. MyISAM 테이블의 최적화
    7. MEMORY 테이블 최적화
    8. 쿼리 실행 계획의 이해
    9. 버퍼링과 캐시
    10. 잠금 작업의 최적화
    11. MySQL 서버의 최적화
    12. 성능 측정
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

8.2.1.9 LEFT JOIN과 RIGHT JOIN 최적화

MySQL은 다음과 같이 A LEFT JOIN B join_condition 을 구현합니다.

  • 테이블 B 는 테이블 A 와 A 가 의존하는 모든 테이블에 의존하여 설정됩니다.

  • 테이블 A 는 LEFT JOIN 조건에서 사용되는 모든 테이블 ( B 제외)에 따라 설정됩니다.

  • LEFT JOIN 조건은 테이블 B 의 행의 취득 방법을 결정하는 데 사용됩니다. (즉, WHERE 절의 모든 조건이 사용되지 않습니다).

  • 테이블은 항상 그것이 의존하는 모든 테이블의 뒤에 읽도록​​ 제외한 모든 표준 조인 최적화가 실행됩니다. 순환 종속성 경우 MySQL에서 오류가 발생합니다.

  • 모든 표준 WHERE 최적화가 실행됩니다.

  • A 에 WHERE 절과 일치하는 행이 있지만, B 에 ON 조건에 일치하는 행이없는 경우 모든 컬럼이 NULL 로 설정 된 추가의 B 행이 생성됩니다.

  • LEFT JOIN 을 사용하여 일부 테이블에 존재하지 않는 행을 검색하고 WHERE 부분의 col_name IS NULL 테스트를 실행 한 경우 (여기서 col_name 이 NOT NULL 로 선언 된 컬럼), MySQL은 LEFT JOIN 조건에 일치하는 1 개의 행이 발견 된 후 더 이상 행 (특정 키 조합) 검색을 중지합니다.

RIGHT JOIN 의 구현은 테이블의 역할이 반대 LEFT JOIN 의 경우와 비슷합니다.

결합 최적화 프로그램은 테이블을 조인 할 순서를 계산합니다. LEFT JOIN 또는 STRAIGHT_JOIN 에 의해 강제되는 테이블 읽기 순서는 확인하는 테이블 배열이 줄어들 기 때문에 결합 최적화가 훨씬 빠르게 그 작업을 수행하는 데 도움이됩니다. 이것은 다음과 같은 종류의 쿼리를 실행하는 경우, LEFT JOIN 에 의해 d 전에 b 를 읽도록 강제되기 때문에 MySQL이 그 전체 검사를 실행하는 것을 의미합니다.

 SELECT *
   FROM a JOIN b LEFT JOIN c ON (c.key = a.key)
   LEFT JOIN d ON (d.key = a.key)
   WHERE b.key = d.key;

이 예제의 수정은 a 와 b 가 FROM 절에 나타나는 순서를 반대로하는 것입니다.

 SELECT *
   FROM b JOIN a LEFT JOIN c ON (c.key = a.key)
   LEFT JOIN d ON (d.key = a.key)
   WHERE b.key = d.key;

LEFT JOIN 에서 생성 된 NULL 행에 대해 WHERE 조건이 항상 false 인 경우, LEFT JOIN 는 통상의 결합으로 변경됩니다. 예를 들어, t2.column1 가 NULL 인 경우 다음 쿼리의 WHERE 절은 false입니다.

 SELECT * FROM t1 LEFT JOIN t2 ON (column1) WHERE t2.column2 = 5;

따라서 쿼리를 일반 결합으로 변환해도 문제 없습니다.

 SELECT * FROM t1, t2 WHERE t2.column2 = 5 AND t1.column1 = t2.column1;

이렇게하면 테이블 t1 전에 테이블 t2 을 사용하는 것이 더 적절한 쿼리 계획하는 경우에, MySQL은 그것을 실행할 수 있기 때문에 속도가 빨라집니다. 테이블의 조인 순서에 대한 힌트를 제공하려면 STRAIGHT_JOIN 을 사용합니다. ( 섹션 13.2.9 "SELECT 구문" 을 참조하십시오.)

서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved