• 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.5 멀티 컬럼 인덱스

MySQL은 복합 인덱스 (즉, 여러 컬럼에 대한 인덱스)를 만들 수 있습니다. 인덱스는 최대 16 컬럼으로 구성 할 수 있습니다. 특정 데이터 유형은 컬럼의 프리픽스 인덱스를 설정할 수 있습니다 ( 섹션 8.3.4 "컬럼 인덱스" 를 참조하십시오).

MySQL은 인덱스에서 모든 컬럼을 테스트하는 쿼리 또는 첫 번째 컬럼 처음 두 개의 컬럼 처음 세 개의 컬럼과 같이 테스트하는 쿼리에 멀티 컬럼 인덱스를 사용할 수 있습니다. 인덱스 정의의 올바른 순서로 컬럼을 지정하는 경우 단일 복합 인덱스는 같은 테이블에 여러 종류의 쿼리 속도를 높일 수 있습니다.

멀티 컬럼 인덱스는 인덱스 설정된 컬럼의 값을 연결하여 만든 값을 포함하는 행이다 정렬 된 배열로 간주 될 수 있습니다.

참고

복합 인덱스 대신 다른 컬럼의 정보에 따라 '해시 된'컬럼을 도입 할 수 있습니다. 이 컬럼이 짧아 충분히 고유 인덱스가 설정되어있는 경우, 다수의 컬럼에 "광범위한"인덱스보다 빠를 수 있습니다. MySQL에서는이 추가 컬럼을 매우 쉽게 사용할 수 있습니다.

 SELECT * FROM tbl_name WHERE hash_col = MD5 (CONCAT ( val1 , val2 )) AND col1 = val1 AND col2 = val2 ; 

테이블이 다음과 같은 사양이라고합니다.

 CREATE TABLE test (
     id INT NOT NULL,
     last_name CHAR (30) NOT NULL,
     first_name CHAR (30) NOT NULL,
     PRIMARY KEY (id)
     INDEX name (last_name, first_name)
 );

name 인덱스는 last_name 컬럼과 first_name 컬럼에 대한 인덱스입니다. 이 인덱스는 last_name 값과 first_name 값의 조합에 알려진 범위의 값을 지정하는 쿼리 조회에 사용할 수 있습니다. 그 컬럼은 인덱스의 좌단의 프리픽스이기 때문에 last_name 값만을 지정하는 쿼리에 사용할 수 있습니다 (이 부분에서 후술하는 바와 같이). 따라서 name 인덱스는 다음 쿼리에서 조회에 사용됩니다.

 SELECT * FROM test WHERE last_name = 'Widenius';

 SELECT * FROM test
   WHERE last_name = 'Widenius'AND first_name = 'Michael';

 SELECT * FROM test
   WHERE last_name = 'Widenius'
   AND (first_name = 'Michael'OR first_name = 'Monty');

 SELECT * FROM test
   WHERE last_name = 'Widenius'
   AND first_name> = 'M'AND first_name < 'N';

그러나 name 인덱스는 다음 쿼리 조회에 사용되지 않습니다.

 SELECT * FROM test WHERE first_name = 'Michael';

 SELECT * FROM test
   WHERE last_name = 'Widenius'OR first_name = 'Michael';

다음 SELECT 문을 발행한다고합니다.

 SELECT * FROM tbl_name
   WHERE col1 = val1 AND col2 = val2 ;

col1 과 col2 에 대한 멀티 컬럼 인덱스가 존재하는 경우 해당 행을 직접 가져올 수 있습니다. col1 과 col2 에 대해 별도의 단일 컬럼 인덱스가 존재하는 경우, 옵티마이 저는 인덱스 병합 최적화 ( 섹션 8.2.1.4 "인덱스 병합 최적화" 를 참조하십시오)의 사용을 시도하거나 보다 많은 행을 제외 인덱스를 판단하여 그 인덱스를 사용하여 행을 인출함으로써 가장 제한적인 인덱스를 찾으려고합니다.

테이블에 멀티 컬럼 인덱스가있는 경우, 옵티마이 저는 인덱스의 좌단의 프리픽스를 사용하여 행을 조회 할 수 있습니다. 예를 들어, (col1, col2, col3) 에 3 컬럼의 인덱스가있는 경우, (col1) , (col1, col2) 와 (col1, col2, col3) 에 인덱스 검색 기능을 사용할 수 있습니다.

컬럼이 인덱스의 좌단의 프리픽스를 형성하지 않은 경우 MySQL이 인덱스를 사용하여 조회를 실행할 수 없습니다. 여기에 표시된 SELECT 문이 있다고합니다.

 SELECT * FROM tbl_name WHERE col1 = val1 ;
 SELECT * FROM tbl_name WHERE col1 = val1 AND col2 = val2 ;

 SELECT * FROM tbl_name WHERE col2 = val2 ;
 SELECT * FROM tbl_name WHERE col2 = val2 AND col3 = val3 ;

(col1, col2, col3) 인덱스가 존재하는 경우, 처음 두 개의 쿼리 만이 인덱스를 사용합니다. 세 번째와 네 번째 쿼리에는 인덱스 설정된 컬럼이 관계 있지만 (col2) 와 (col2, col3) 는 (col1, col2, col3) 의 좌단의 프리픽스가 없습니다.

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