• 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 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 1. MySQL Partitioning 개요
    2. Partitioning Types
    1. RANGE 파티셔닝
    2. LIST 파티셔닝
    3. COLUMNS 파티셔닝
    4. HASH 파티셔닝
    5. KEY 파티셔닝
    6. 서브 파티셔닝
    7. MySQL Partitioning NULL 처리
    3. 파티션 관리
    4. Partition Pruning
    5. 파티션 선택
    6. 파티셔닝 제약 및 제한
  • 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 새로운 기능

19.2.5 KEY 파티셔닝

키에 의한 파티셔닝은 해시로 파티셔닝과 비슷하지만 해시 파티셔닝은 사용자 정의 표현식을 사용하여 키 파티셔닝에 대한 해시 함수는 MySQL 서버에 의해 제공됩니다. MySQL Cluster는이를 위해 MD5() 를 사용합니다. 다른 스토리지 엔진을 사용하는 테이블의 경우, 서버는 PASSWORD() 와 같은 알고리즘을 기반으로 자체 내부 해시 함수를 사용합니다.

CREATE TABLE ... PARTITION BY KEY 구문 규칙은 해시로 파티션 된 테이블을 작성할 때의 것과 비슷합니다. 주요 차이점을 보여줍니다.

  • HASH 대신 KEY 가 사용됩니다.

  • KEY 는 0 개 이상의 컬럼 이름의 목록만을 취합니다. 파티셔닝 키로 사용되는 컬럼은 테이블의 기본 키의 일부 또는 전부를 구성해야합니다 (테이블에 그것이있는 경우). 파티셔닝 키로 컬럼 이름을 지정하지 않으면 테이블의 기본 키가 사용됩니다 (있는 경우). 예를 들어, 다음의 CREATE TABLE 문은 MySQL 5.6에서 사용할 수 있습니다.

    CREATE TABLE k1 (
        id INT NOT NULL PRIMARY KEY,
        name VARCHAR(20)
    )
    PARTITION BY KEY()
    PARTITIONS 2;
    

    기본 키는 아니지만 고유 키는 경우는 파티셔닝 키에 고유 키가 사용됩니다.

    CREATE TABLE k1 (
        id INT NOT NULL,
        name VARCHAR(20),
        UNIQUE KEY (id)
    )
    PARTITION BY KEY()
    PARTITIONS 2;
    

    그러나 고유 키 컬럼이 NOT NULL 로 정의되어 있지 않은 경우 이전 문은 실패합니다.

    두 경우 모두 파티셔닝 키는 id 컬럼입니다. 그러나 SHOW CREATE TABLE 의 출력과 INFORMATION_SCHEMA.PARTITIONS 테이블 PARTITION_EXPRESSION 컬럼에 표시되지 않습니다.

    다른 파티션 타입의 경우와 달리, KEY 에 의한 분할에 사용되는 컬럼은 정수 또는 NULL 값으로 제한되지 않습니다. 예를 들어, 다음의 CREATE TABLE 문은 유효합니다.

    CREATE TABLE tm1 (
        s1 CHAR(32) PRIMARY KEY
    )
    PARTITION BY KEY(s1)
    PARTITIONS 10;
    

    다른 파티션 유형이 지정된 경우 이전 명령문이 유효 없습니다 (이 경우 s1 은 테이블의 기본 키이기 때문에 단순히 PARTITION BY KEY() 를 사용하는 것도 효과적이며, PARTITION BY KEY(s1) 과 같은 효과가 있습니다).

    이 문제에 대한 자세한 내용은 섹션 19.6 "파티셔닝 제약 및 제한" 을 참조하십시오.

    참고

    NDB 스토리지 엔진을 사용하는 테이블은 테이블의 기본 키를 파티셔닝 키로 사용하여 KEY 에 의해 암묵적으로 분할됩니다. MySQL Cluster 테이블에 명시적인 기본 키가없는 경우는 NDB 스토리지 엔진에 의해 각 MySQL Cluster 테이블에 생성 된 "숨겨진"기본 키가 파티셔닝 키로 사용됩니다.

    NDB 테이블에 명시적인 파티셔닝 구성표를 정의하려면 테이블에 명시적인 기본 키가 필요하며, 분할 식에 사용되는 컬럼이 키의 일부인해야합니다. 그러나 테이블이 "하늘"의 파티셔닝 식을 사용하는 (즉, 컬럼 참조없이 PARTITION BY KEY() ) 경우 명시적인 기본 키는 필요하지 않습니다.

    이 파티션은 ndb_desc 유틸리티 ( -p 옵션 포함)을 사용하여 확인할 수 있습니다.

    중요

    키에 의해 분할 된 테이블의 경우, ALTER TABLE DROP PRIMARY KEY 를 실행할 수 없습니다. 그것을 실행하면 다음과 같은 오류가 발생합니다 : ERROR 1466 (HY000) : Field in list of fields for partition function not found in table. 이것은 KEY 로 파티션 된 MySQL Cluster 테이블의 경우는 문제가 없습니다. 그런 경우 "숨겨진"기본 키 테이블의 새로운 파티셔닝 키로 사용하여 테이블이 재구성됩니다. 제 18 장 "MySQL Cluster NDB 7.3 및 MySQL Cluster NDB 7.4" 을 참조하십시오.

리니어 키에 의해 테이블​​을 분할 할 수 있습니다. 다음은 간단한 예제를 보여줍니다.

CREATE TABLE tk (
    col1 INT NOT NULL,
    col2 CHAR(5),
    col3 DATE
)
PARTITION BY LINEAR KEY (col1)
PARTITIONS 3;

LINEAR 를 사용하는 것은 HASH 파티셔닝의 경우와 같은 효과가 KEY 파티셔닝에 파티셔닝 번호는 법 연산이 아니라 제곱 알고리즘을 사용하여 도출됩니다. 이 알고리즘의 설명 및 그 영향에 대해서는 섹션 19.2.4.1 "LINEAR HASH 파티셔닝" 를 참조하십시오.

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