• 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. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 1. 데이터 정의 문
    1. ALTER DATABASE 구문
    2. ALTER EVENT 구문
    3. ALTER LOGFILE GROUP 구문
    4. ALTER FUNCTION 구문
    5. ALTER PROCEDURE 구문
    6. ALTER SERVER 구문
    7. ALTER TABLE 구문
    8. ALTER TABLESPACE 구문
    9. ALTER VIEW 구문
    10. REATE DATABASE 구문
    11. CREATE EVENT 구문
    12. CREATE FUNCTION 구문
    13. CREATE INDEX 구문
    14. CREATE LOGFILE GROUP 구문
    15. CREATE PROCEDURE 및 CREATE FUNCTION 구문
    16. CREATE SERVER 구문
    17. CREATE TABLE 구문
    18. CREATE TABLESPACE 구문
    19. CREATE TRIGGER 구문
    20. CREATE VIEW 구문
    21. DROP DATABASE 구문
    22. DROP EVENT 구문
    23. DROP FUNCTION 구문
    24. DROP INDEX 구문
    25. DROP LOGFILE GROUP 구문
    26. DROP PROCEDURE 및 DROP FUNCTION 구문
    27. DROP SERVER 구문
    28. DROP TABLE 구문
    29. DROP TABLESPACE 구문
    30. DROP TRIGGER 구문
    31. DROP VIEW 구문
    32. RENAME TABLE 구문
    33. TRUNCATE TABLE 구문
    2. 데이터 조작 문
    3. MySQL 트랜잭션과 잠금 문
    4. 복제 문
    5. Prepared Statements위한 SQL 구문
    6. MySQL 복합문 구문
    7. 데이터베이스 관리 문
    8. MySQL 유틸리티 문
  • 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 새로운 기능

13.1.13 CREATE INDEX 구문

CREATE [ONLINE|OFFLINE] [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
    [index_type]
    ON tbl_name (index_col_name,...)
    [index_option]
    [algorithm_option | lock_option] ...

index_col_name:
    col_name [(length)] [ASC | DESC]

index_type:
    USING {BTREE | HASH}

index_option:
    KEY_BLOCK_SIZE [=] value
  | index_type
  | WITH PARSER parser_name
  | COMMENT 'string'

algorithm_option:
    ALGORITHM [=] {DEFAULT|INPLACE|COPY}

lock_option:
    LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE} 

CREATE INDEX 는 인덱스를 만드는 데 ALTER TABLE 문에 매핑됩니다. 섹션 13.1.7 "ALTER TABLE 구문" 을 참조하십시오. CREATE INDEX 를 사용하여 PRIMARY KEY 를 만들 수 없습니다. 대신 ALTER TABLE 을 사용합니다. 인덱스의 자세한 내용은 섹션 8.3.1 "MySQL의 인덱스 사용 방법" 을 참조하십시오.

일반적으로 테이블의 모든 인덱스는 테이블 자체가 CREATE TABLE 에서 작성된 시점에서 만듭니다. 섹션 13.1.17 "CREATE TABLE 구문" 을 참조하십시오. 이 지침은 기본 키에 의해 데이터 파일의 행의 물리적 배열이 결정되는 InnoDB 테이블의 경우에 특히 중요합니다. CREATE INDEX 는 기존의 테이블에 인덱스를 추가 할 수 있습니다.

(col1,col2,...) 형식의 컬럼리스트는 멀티 컬럼 인덱스를 만듭니다. 인덱스 키 값은 특정 컬럼의 값을 연결하여 형성됩니다.

col_name ( length ) 구문을 사용하여 인덱스 프리픽스 길이를 지정하여 컬럼 값의 첫 부분만을 사용하는 인덱스를 만들 수 있습니다.

  • 프리픽스는 CHAR , VARCHAR , BINARY 및 VARBINARY 컬럼에 지정할 수 있습니다.

  • BLOB 및 TEXT 컬럼에 인덱스를 설정할 수 있지만, 프리픽스 길이를 지정해야합니다.

  • 프리픽스 길이는 바이너리가 아닌 문자열의 경우는 문자에서 이진 문자열 형의 경우는 바이트 단위로 지정됩니다. 즉, 인덱스 항목은 CHAR , VARCHAR 및 TEXT 컬럼의 경우 각 컬럼 값의 첫 번째 length 문자 BINARY , VARBINARY , 그리고 BLOB 컬럼의 경우 각 컬럼 값의 첫 번째 length 바이트로 구성됩니다.

  • 이 섹션의 나머지 부분에서 설명 된 바와 같이, 공간 컬럼의 경우 접두어 값을 지정할 수 없습니다.

다음 문은 name 컬럼의 최초의 10 문자를 사용하여 인덱스를 만듭니다.

 CREATE INDEX part_of_name ON customer (name (10));

컬럼의 이름이 일반적으로 처음 10 자 다른 경우는이 인덱스가 name 컬럼 전체에서 생성 된 인덱스보다 훨씬 느린 것은 없을 것입니다. 또한 인덱스 컬럼 접두어를 사용하면 인덱스 파일을 훨씬 작게 할 수 있기 때문에 많은 디스크 공간이 절약 될뿐만 아니라 INSERT 작업도 가속화 될 가능성이 있습니다.

프리픽스의 지원과 프리픽스의 길이 (지원되는 경우)는 스토리지 엔진에 의존합니다. 예를 들어, InnoDB 테이블에서는 프리픽스의 길이를 최대 767 바이트이며 또한 innodb_large_prefix 옵션이 활성화되어있는 경우는 3072 바이트로 할 수 있습니다. MyISAM 테이블의 경우, 프리픽스의 제한은 1000 바이트입니다.

참고

프리픽스의 제한이 바이트 단위로 측정되는 반면 CREATE INDEX 문에서 프리픽스 길이는 바이너리가 아닌 데이터 형식 ( CHAR , VARCHAR , TEXT )는 문자로 해석됩니다. 멀티 바이트 문자 집합을 사용하는 컬럼의 프리픽스 길이를 지정하는 경우이 점을 고려하십시오.

NDBCLUSTER 테이블의 가변 폭 컬럼의 인덱스는 온라인으로, 즉 테이블 복사 할 필요없이 생성됩니다. 이 테이블은이 작업 기간 동안 동일한 API 노드에 대한 다른 작업에 대해 잠겨 있지만 다른 MySQL Cluster API 노드에서 액세스에 잠겨 없습니다. 이것은 서버가 실행할 수 있다고 판단하는 경우 항상 그 서버에서 자동으로 실행됩니다. 이를 위해 특수 SQL 구문이나 서버 옵션을 사용할 필요가 없습니다.

표준의 MySQL 5.6 릴리즈에서는 서버가 테이블 복사없이 인덱스를 작성하기로 결정했을 때, 그 서버를 재정의 할 수 없습니다. MySQL Cluster는 OFFLINE 키워드를 사용하여 인덱스를 오프라인으로 만들 수 있습니다 (이렇게하면 그 테이블은 클러스터의 모든 API 노드에 잠겨 있습니다). CREATE OFFLINE INDEX 및 CREATE ONLINE INDEX 를 관리하는 규칙이나 제한은 ALTER OFFLINE TABLE ... ADD INDEX 및 ALTER ONLINE TABLE ... ADD INDEX 의 경우와 동일합니다. ONLINE 키워드를 사용하여 일반적으로 오프라인에서 작성되는 인덱스의 복사없이 작성이 실행되도록 할 수 없습니다. CREATE INDEX 작업을 테이블 복사없이 실행할 수없는 경우 서버는 ONLINE 키워드를 무시합니다. 자세한 내용은 섹션 13.1.7.2 "MySQL Cluster에서 ALTER TABLE 온라인 작업" 을 참조하십시오.

ONLINE 및 OFFLINE 키워드는 MySQL Cluster에서만 사용할 수 있습니다. 이러한 키워드를 표준 MySQL Server 5.6 릴리스에서 사용하려고하면 구문 오류가 발생합니다. ONLINE 및 OFFLINE 키워드는 MySQL Cluster NDB 7.3에서 비추천입니다. MySQL Cluster NDB 7.4에서 계속 지원되지만 향후 MySQL Cluster 릴리스에서 제거 될 수 있습니다.

UNIQUE 인덱스는 인덱스의 모든 값이 달라야하는 제한 조건을 작성합니다. 기존 행에 일치하는 키 값을 갖는 새 행을 추가하려고하면 오류가 발생합니다. 모든 엔진에 대한 UNIQUE 인덱스는 NULL 을 포함 할 수있다 컬럼에서 여러 NULL 값을 허용합니다. UNIQUE 인덱스 컬럼의 프리픽스 값을 지정하려면 컬럼 값이 프리픽스 내에서 고유해야합니다.

FULLTEXT 인덱스는 InnoDB 와 MyISAM 테이블에서만 지원되며, CHAR , VARCHAR 및 TEXT 컬럼 만 포함 할 수 있습니다. 인덱스 설정은 항상 컬럼 전체에 대해 수행됩니다. 컬럼 접두어 인덱싱은 지원되지 않기 때문에 프리픽스 길이가 지정 되어도 무시됩니다. 작업의 자세한 내용은 섹션 12.9 "전체 텍스트 검색 함수" 를 참조하십시오.

MyISAM , InnoDB , NDB 및 ARCHIVE 스토리지 엔진은 POINT 과 GEOMETRY 등의 공간 컬럼을 지원하고 있습니다. ( 섹션 11.5 "공간 데이터의 확장 ' 에서는 공간 데이터 형식에 대해 설명하고있다.) 그러나 공간 컬럼의 인덱스 설정에 대한 지원은 엔진에 따라 다릅니다. 공간 및 비 공간 인덱스는 다음 규칙에 따라 사용할 수 있습니다.

( SPATIAL INDEX 를 사용하여 생성 된) 공간 인덱스는 다음과 같은 특징이 있습니다.

  • MyISAM 테이블에서만 사용할 수 있습니다. 다른 스토리지 엔진에 SPATIAL INDEX 를 지정하면 오류가 발생합니다.

  • 인덱스 컬럼은 NOT NULL 이어야합니다.

  • MySQL 5.6에서는 컬럼 프리픽스 길이는 금지되어 있습니다. 각 컬럼의 폭 전체에 인덱스가 설정됩니다.

INDEX , UNIQUE 또는 PRIMARY KEY 로 만든 비 공간 인덱스의 특성은 다음과 같습니다.

  • ARCHIVE 을 제외한 공간 컬럼을 지원하는 모든 스토리지 엔진에 대해 허용됩니다.

  • 인덱스가 기본 키가 아닌 한, 컬럼을 NULL 로 할 수 있습니다.

  • POINT 컬럼을 제외한 비 SPATIAL 인덱스의 공간 컬럼에 대해 컬럼 프리픽스 길이를 지정해야합니다. (이것은 인덱스 BLOB 컬럼의 경우와 같은 요구 사항입니다.) 프리픽스 길이는 바이트 단위로 지정됩니다.

  • 비 SPATIAL 인덱스의 인덱스 유형은 스토리지 엔진에 따라 다릅니다. 현재는 B 트리가 사용됩니다.

MySQL 5.6는 다음과 같습니다.

  • NULL 값을 가질 수가있는 컬럼에 인덱스를 추가 할 수는 InnoDB , MyISAM 또는 MEMORY 스토리지 엔진을 사용하는 경우뿐입니다.

  • BLOB 또는 TEXT 컬럼에 인덱스를 추가 할 수는 InnoDB 또는 MyISAM 스토리지 엔진을 사용하는 경우뿐입니다.

  • innodb_stats_persistent 설정이 활성화되어 있다면, InnoDB 테이블에서 인덱스를 작성한 후 해당 테이블에 대해 ANALYZE TABLE 문을 실행합니다.

index_col_name 의 지정을 ASC 또는 DESC 로 종료시킬 수 있습니다. 이러한 키워드는 인덱스 값의 오름차순 또는 내림차순으로 저장을 지정하는 미래의 확장을 위해 허용되어 있습니다. 현재 이들은 분석되지만 무시됩니다. 인덱스 값은 항상 오름차순으로 저장됩니다.

인덱스 컬럼리스트의 후에 인덱스 옵션을 지정할 수 있습니다. index_option 값은 다음 중 하나를 지정할 수 있습니다.

  • KEY_BLOCK_SIZE [=] value

    옵션으로 인덱스 키의 블록에 사용하는 크기를 바이트 단위로 지정합니다. 이 값은 팁으로 처리됩니다. 필요에 따라 다른 크기를 사용할 수 있습니다.

    참고

    KEY_BLOCK_SIZE 은 InnoDB 에 테이블 레벨에서만 지원됩니다. 섹션 13.1.17 "CREATE TABLE 구문" 을 참조하십시오.

  • index_type

    일부 스토리지 엔진은 인덱스를 만들 때 인덱스 유형을 지정할 수 있습니다. 스토리지 엔진별로 지원되는 허용되는 인덱스 유형 값을 다음 표에 나타냅니다. 여러 인덱스 유형이 표시된 경우, 첫 번째가 인덱스 유형 지시자가 지정되지 않으면 기본입니다.

    스토리지 엔진 허용되는 인덱스 유형
    InnoDB BTREE
    MyISAM BTREE
    MEMORY / HEAP HASH , BTREE
    NDB HASH , BTREE (텍스트의 주를 참조하십시오)

    예 :

     CREATE TABLE lookup (id INT) ENGINE = MEMORY;
     CREATE INDEX id_index ON lookup (id) USING BTREE;
    

    BTREE 인덱스는 NDBCLUSTER 스토리지 엔진에 의해 T 트리 인덱스로 구현됩니다.

    참고

    NDB 테이블 컬럼에 대한 인덱스의 경우 USING 옵션은 고유 인덱스 또는 기본 키에 대해서만 지정할 수 있습니다. USING HASH 는 암시 적 정렬 된 인덱스가 생성되지 않도록합니다. 그렇지 않으면, NDB 테이블에 고유 인덱스 또는 기본 키를 만들 때 정렬 된 인덱스와 해시 인덱스가 모두 자동으로 생성되어 각각이 같은 일련의 컬럼에 인덱스를 설정합니다.

    즉, NULL 컬럼에서 고유 인덱스 또는 기본 키를 사용하는 쿼리는 항상 NDB 의해 테이블 전체 스캔으로 처리됩니다. 특히 NDB 테이블의 고유 인덱스 또는 기본 키 컬럼에 관련한 IS NULL 또는 IS NOT NULL 조건을 사용하려는 경우 이러한 인덱스를 모두 USING HASH 없이 작성하도록하십시오.

    index_type 절을 SPATIAL INDEX 와 함께 사용할 수 없습니다.

    특정 스토리지 엔진에 대해 유효하지 않은 인덱스 유형을 지정했지만 그 엔진이 쿼리 결과에 영향을주지 않고 사용할 수있는 사용 가능한 다른 인덱스 타입이 존재하는 경우, 엔진이 사용 가능한 유형을 사용 합니다. 파서는 RTREE 를 입력 이름으로 인식하지만 현재 이것은 어떤 스토리지 엔진에 지정할 수 없습니다.

    이 옵션을 ON tbl_name 절 앞에 사용하는 것은 비추천입니다. 이 옵션을이 위치에서 사용하기위한 지원은 미래의 MySQL 릴리스에서 제거 될 예정입니다. index_type 옵션이 전과 후의 두 위치에서 지정된 경우는 마지막 옵션이 적용됩니다.

    TYPE type_name 은 USING type_name 의 동의어로 인식됩니다. 그러나 권장되는 형식은 USING 입니다.

  • WITH PARSER parser_name

    이 옵션은 FULLTEXT 인덱스와 함께 만 사용할 수 있습니다. 이것은 전체 텍스트 인덱싱 설정 및 검색 작업에 특수 처리가 필요한 경우, 파서 플러그인을 인덱스에 연결합니다. 플러그인 작성의 자세한 내용은 섹션 24.2 "MySQL 플러그인 API" 를 참조하십시오.

  • COMMENT ' string '

    인덱스 정의는 최대 1024 문자 옵션의 주석을 포함 할 수 있습니다.

MySQL 5.6.6의 시점에서는 ALGORITHM 및 LOCK 절을 지정할 수 있습니다. 이 테이블 복사 방법과 인덱스가 변경되는 동안 테이블의 읽기 및 쓰기 병렬 처리 수준에 영향을 미칩니다. 여기에는 ALTER TABLE 문에서와 같은 의미가 있습니다. 자세한 내용은 섹션 13.1.7 "ALTER TABLE 구문" 을 참조하십시오.


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