• 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문 최적화
    3. 최적화 및 인덱스
    1. MySQL의 인덱스의 사용 방식
    2. Primary Key 사용
    3. Foreign Key 사용
    4. 컬럼 인덱스
    5. 멀티 컬럼 인덱스
    6. 인덱스 사용량 확인
    7. InnoDB와 MyISAM 인덱스 통계 수집
    8. B 트리 인덱스와 해시 인덱스의 비교
    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.3.8 B 트리 인덱스와 해시 인덱스의 비교

B 트리 및 해시 데이터 구조를 이해하는 것은 인덱스에 이러한 데이터 구조를 사용하는 다양한 스토리지 엔진 (특히 B 트리 인덱스를 사용하거나 해시 인덱스를 사용할지 여부를 선택할 수 MEMORY 스토리지 엔진의 경우 에) 다양한 쿼리가 어떻게 실행되는지를 예측하는 데 도움이 될 수 있습니다.

B 트리 인덱스의 특성

B 트리 인덱스는 = , > , > >= , < , <= , 또는 BETWEEN 연산자를 사용하는 수식에서 컬럼 비교로 사용할 수 있습니다. 이 인덱스는 LIKE 의 인수가 와일드 카드 문자로 시작하지 않는 상수 문자열의 경우 LIKE 비교에도 사용할 수 있습니다. 예를 들어 다음의 SELECT 문은 인덱스를 사용합니다.

 SELECT * FROM tbl_name WHERE key_col LIKE 'Patrick %';
 SELECT * FROM tbl_name WHERE key_col LIKE 'Pat % _ck %';

첫 번째 문장에서는 'Patrick' <= key_col < 'Patricl' 라인 만 고려됩니다. 두 번째 문은 'Pat' <= key_col < 'Pau' 라인 만이 고려됩니다.

다음의 SELECT 문은 인덱스를 사용하지 않습니다.

 SELECT * FROM tbl_name WHERE key_col LIKE '% Patrick %';
 SELECT * FROM tbl_name WHERE key_col LIKE other_col ;

첫 번째 문장에서는 LIKE 값은 와일드 카드 문자로 시작합니다. 두 번째 문은 LIKE 값은 상수가 아닙니다.

... LIKE '% string %' 를 사용하여 string 이 3 자보다 긴 경우 MySQL은 Turbo Boyer-Moore 알고리즘을 사용하여 문자열의 패턴을 초기화하고 나서,이 패턴을 사용하여 검색 를보다 신속하게 실행합니다.

col_name IS NULL 을 사용하는 검색은 col_name 에 인덱스가 설정되어있는 경우에 인덱스가 사용됩니다.

WHERE 절 내의 모든 AND 레벨에 위치해있는 인덱스는 쿼리 최적화에 사용되지 않습니다. 즉, 인덱스의 사용을 가능하게하려면 인덱스 프리픽스가 모든 AND 그룹에서 사용되고있을 필요가 있습니다.

다음 WHERE 절에서는 인덱스가 사용됩니다.

 ... WHERE index_part1 = 1 AND index_part2 = 2 AND other_column = 3

     / * index = 1 OR index = 2 * /
 ... WHERE index = 1 OR A = 10 AND index = 2

     / * optimized like " index_part1 = 'hello' "* /
 ... WHERE index_part1 = 'hello'AND index_part3 = 5

     / * Can use index on index1 but not on index2 or index3 * /
 ... WHERE index1 = 1 AND index2 = 2 OR index1 = 3 AND index3 = 3;

이 WHERE 절에서는 인덱스가 사용되지 않습니다.

     / * index_part1 is not USED * /
 ... WHERE index_part2 = 1 AND index_part3 = 2

     / * Index is not used in both parts of the WHERE clause * /
 ... WHERE index = 1 OR A = 10

     / * No index spans all rows * /
 ... WHERE index_part1 = 1 OR index_part2 = 10

MySQL은 인덱스를 사용할 수있는 경우에도 사용하지 않을 수 있습니다. 이런 경우 하나의 상황은 최적화 프로그램이 인덱스를 사용하여 MySQL이 테이블의 대부분의 행에 액세스 할 필요가 있다고 추정 한 경우입니다. (이 경우 필요한 시크가 적기 때문에 테이블 스캔 쪽이 훨씬 빠를 수 있습니다.) 그러나 그런 쿼리에서 행의 일부만을 얻을 LIMIT 를 사용하는 경우 결과로 반환 약간 줄을 훨씬 빠르게 찾을 수 있기 때문에, MySQL은 어쨌든 인덱스를 사용합니다.

해시 인덱스의 특성

해시 인덱스는 앞서 언급 한 것과 약간 다른 특성을가집니다.

  • 그들은, = 또는 <=> 연산자를 사용하는 등가 비교에만 사용됩니다 (단 매우 빠릅니다). 그들은 값의 범위를 찾을 < 등의 비교 연산자는 사용되지 않습니다. 이 종류의 단일 값 조회에 의존하는 시스템은 "키 값 스토어 '로 알려져 있습니다. 이러한 응용 프로그램에서 MySQL을 사용하려면 가능한 한 많은 해시 인덱스를 사용합니다.

  • 옵티마이 저는 해시 인덱스를 사용하여 ORDER BY 조작을 빠르게 할 수 없습니다. (이 종류의 인덱스는 순서에 다음 항목을 검색하는 데 사용할 수 없습니다.)

  • MySQL은 두 값 사이에 대략 얼마나 줄 수가 있는지를 확인할 수 없습니다 (이것은 범위 최적화 프로그램에서 사용하는 인덱스를 식별하는 데 사용됩니다). 이것은 MyISAM 또는 InnoDB 테이블을 해시 인덱스 설정된 MEMORY 테이블에 변경 한 경우 일부 쿼리에 영향을 줄 수 있습니다.

  • 행의 검색에 키 전체만을 사용할 수 있습니다. (B 트리 인덱스는 키의 모든 왼쪽의 접두어를 사용하여 행을 검색 할 수 있습니다.)


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