• 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.20 풀 테이블 스캔을 피하는 방법

MySQL이 전체 테이블 스캔 을 사용하여 쿼리를 해결하는 경우 EXPLAIN 의 출력은 type 컬럼에 ALL 로 표시됩니다. 이것은 일반적으로 다음의 조건에서 발생합니다.

  • 테이블이 매우 작기 때문에 키 조회에서 번거 로움보다 테이블 스캔을 실행하는 것이 빠릅니다. 이것은 10 줄 미만의 행과 짧은 줄 길이의 테이블에 많습니다.

  • 인덱스가 설정된 컬럼에 대해 ON 또는 WHERE 절에 사용 가능한 제한이 없습니다.

  • 인덱싱 된 열 및 상수 값을 비교하고, MySQL이 (인덱스 트리에 따라) 그 상수가 테이블의 매우 큰 부분을 커버하고 테이블 스캔이 빠르게 이뤄질 것으로 계산했습니다. 섹션 8.2.1.2 "MySQL의 WHERE 절 최적화 방법" 을 참조하십시오.

  • 다른 컬럼을 통해, 중요도가 낮은 (많은 행이 키 값과 일치하는) 키를 사용하고 있습니다. 이 경우, MySQL은 키를 사용하여 다수의 키 조회가 실행되고 테이블 스캔이 빠른 것으로 간주합니다.

작은 테이블은 테이블 스캔은 많은 경우에 적절하고 실행의 영향은 무시할 수 있습니다. 큰 테이블에서는 최적화가 테이블 스캔을 잘못 선택하지 않도록 다음 기법을 시도해보십시오.

  • ANALYZE TABLE tbl_name 을 사용하여 스캔되는 테이블의 키 분포를 업데이트합니다. 섹션 13.7.2.1 "ANALYZE TABLE 구문" 을 참조하십시오.

  • 스캔 된 테이블에 FORCE INDEX 를 사용하여 MySQL에 테이블 스캔은 지정한 인덱스를 사용하는 것과 비교하여 현저하게 부하가 큰 것을 알 수 있습니다.

     SELECT * FROM t1, t2 FORCE INDEX ( index_for_column )
       WHERE t1. col_name = t2. col_name ;
    

    섹션 13.2.9.3 "인덱스 힌트 구문" 을 참조하십시오.

  • --max-seeks-for-key=1000 옵션을 사용해 mysqld를 시작하거나 SET max_seeks_for_key=1000 을 사용하여 최적화에 키 스캔에서는 1,000 더 키시쿠가 발생하지 않으면 상정하도록 에 전달합니다. 섹션 5.1 "서버 시스템 변수" 를 참조하십시오.


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