Loading...
MySQL 9.5 Reference Manual 9.5의 26.2 Partitioning Types의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
26.2.1 RANGE Partitioning 26.2.2 LIST Partitioning 26.2.3 COLUMNS Partitioning 26.2.4 HASH Partitioning 26.2.5 KEY Partitioning 26.2.6 Subpartitioning 26.2.7 How MySQL Partitioning Handles NULL
이 절에서는 MySQL 9.5에서 사용 가능한 파티셔닝의 유형에 대해 설명합니다. 여기에는 다음에 나열된 유형들이 포함됩니다:
RANGE partitioning.
이 유형의 파티셔닝은 주어진 범위 내에 속하는 컬럼 값에 따라 로우를 파티션에 할당합니다. Section 26.2.1, “RANGE Partitioning”을 참조하십시오. 이 유형의 확장인 RANGE COLUMNS에 대한 정보는 Section 26.2.3.1, “RANGE COLUMNS partitioning”을 참조하십시오.
LIST partitioning.
RANGE에 의한 파티셔닝과 유사하지만, 파티션은 컬럼이 이산 값 집합 중 하나와 일치하는지에 따라 선택됩니다. Section 26.2.2, “LIST Partitioning”을 참조하십시오. 이 유형의 확장인 LIST COLUMNS에 대한 정보는 Section 26.2.3.2, “LIST COLUMNS partitioning”을 참조하십시오.
HASH partitioning.
이 유형의 파티셔닝에서는, 테이블에 삽입될 로우의 컬럼 값에 대해 작동하는 사용자 정의 표현식이 반환하는 값에 따라 파티션이 선택됩니다. 이 함수는 정수 값을 반환하는, MySQL에서 유효한 어떤 표현식으로도 구성될 수 있습니다. Section 26.2.4, “HASH Partitioning”을 참조하십시오.
이 유형의 확장인 LINEAR HASH도 사용할 수 있습니다. Section 26.2.4.1, “LINEAR HASH Partitioning”을 참조하십시오.
KEY partitioning.
이 유형의 파티셔닝은 HASH에 의한 파티셔닝과 유사하지만, 평가할 하나 이상의 컬럼만 제공되며, MySQL 서버가 자체 해싱 함수를 제공합니다. 이 컬럼들은 반드시 정수 값을 포함할 필요는 없습니다. MySQL에서 제공하는 해싱 함수는 컬럼 데이터 타입과 관계없이 정수 결과를 보장하기 때문입니다. 이 유형의 확장인 LINEAR KEY도 사용할 수 있습니다. Section 26.2.5, “KEY Partitioning”을 참조하십시오.
데이터베이스 파티셔닝의 매우 일반적인 사용 사례는 날짜별로 데이터를 분리하는 것입니다. 일부 데이터베이스 시스템은 MySQL이 9.5에서 구현하지 않은 명시적 날짜 파티셔닝을 지원합니다.
그러나 MySQL에서 DATE, TIME, 또는 DATETIME 컬럼, 혹은 이러한 컬럼을 사용하는 표현식에 기반한 파티셔닝 스킴을 생성하는 것은 어렵지 않습니다.
KEY 또는 LINEAR KEY에 의한 파티셔닝을 사용할 때는, 파티셔닝 컬럼의 값을 아무런 수정 없이 DATE, TIME, 또는 DATETIME 컬럼을 파티셔닝 컬럼으로 사용할 수 있습니다. 예를 들어, 다음의 테이블 생성 문은 MySQL에서 완전히 유효합니다:
1CREATE TABLE members ( 2 firstname VARCHAR(25) NOT NULL, 3 lastname VARCHAR(25) NOT NULL, 4 username VARCHAR(16) NOT NULL, 5 email VARCHAR(35), 6 joined DATE NOT NULL 7) 8PARTITION BY KEY(joined) 9PARTITIONS 6;
MySQL 9.5에서는 RANGE COLUMNS 및 LIST COLUMNS 파티셔닝을 사용하여 파티셔닝 컬럼으로 DATE 또는 DATETIME 컬럼을 사용하는 것도 가능합니다.
다른 파티셔닝 타입은 정수 값 또는 NULL을 반환하는 파티셔닝 표현식을 필요로 합니다. RANGE, LIST, HASH, 또는 LINEAR HASH로 날짜 기반 파티셔닝을 사용하려면, DATE, TIME, 또는 DATETIME 컬럼에 대해 작동하고 그러한 값을 반환하는 함수를 사용하면 됩니다. 다음 예와 같습니다:
1CREATE TABLE members ( 2 firstname VARCHAR(25) NOT NULL, 3 lastname VARCHAR(25) NOT NULL, 4 username VARCHAR(16) NOT NULL, 5 email VARCHAR(35), 6 joined DATE NOT NULL 7) 8PARTITION BY RANGE( YEAR(joined) ) ( 9 PARTITION p0 VALUES LESS THAN (1960), 10 PARTITION p1 VALUES LESS THAN (1970), 11 PARTITION p2 VALUES LESS THAN (1980), 12 PARTITION p3 VALUES LESS THAN (1990), 13 PARTITION p4 VALUES LESS THAN MAXVALUE 14);
날짜를 사용한 파티셔닝의 추가적인 예제는 이 장의 다음 절에서 찾을 수 있습니다:
보다 복잡한 날짜 기반 파티셔닝 예제는 다음 절을 참조하십시오:
MySQL 파티셔닝은 TO_DAYS(), YEAR(), 그리고 TO_SECONDS() 함수와 함께 사용하도록 최적화되어 있습니다. 그러나 WEEKDAY(), DAYOFYEAR(), MONTH()과 같이 정수 또는 NULL을 반환하는 다른 날짜 및 시간 함수를 사용할 수도 있습니다. 이러한 함수에 대한 자세한 정보는 Section 14.7, “Date and Time Functions”을 참조하십시오.
사용하는 파티셔닝 타입에 관계없이, 파티션은 생성 시 항상 0부터 시작하여 자동으로 순차적으로 번호가 매겨진다는 점을 기억하는 것이 중요합니다. 새로운 로우가 파티셔닝된 테이블에 삽입될 때, 올바른 파티션을 식별하는 데 사용되는 것은 이 파티션 번호입니다.
예를 들어, 테이블이 4개의 파티션을 사용한다면, 이 파티션들은 0, 1, 2, 3으로 번호가 매겨집니다. RANGE 및 LIST 파티셔닝 타입의 경우, 각 파티션 번호에 대해 파티션이 정의되어 있는지 확인해야 합니다. HASH 파티셔닝의 경우, 사용자가 제공한 표현식은 정수 값을 평가해야 합니다. KEY 파티셔닝에서는 MySQL 서버가 내부적으로 사용하는 해싱 함수가 이 문제를 자동으로 처리합니다.
파티션 이름은 일반적으로 테이블과 데이터베이스에 적용되는 것과 같은 MySQL 식별자 규칙을 따릅니다. 그러나 파티션 이름은 대소문자를 구분하지 않는다는 점에 유의해야 합니다. 예를 들어, 다음 CREATE TABLE 문은 아래와 같이 실패합니다:
1mysql> CREATE TABLE t2 (val INT) 2 -> PARTITION BY LIST(val)( 3 -> PARTITION mypart VALUES IN (1,3,5), 4 -> PARTITION MyPart VALUES IN (2,4,6) 5 -> ); 6ERROR 1488 (HY000): Duplicate partition name mypart
실패하는 이유는 MySQL이 파티션 이름 mypart와 MyPart 사이에 차이가 없다고 보기 때문입니다.
테이블에 대한 파티션 수를 지정할 때는, 선행 0이 없는 양의 0이 아닌 정수 리터럴로 표현해야 하며, 0.8E+01 또는 6-2처럼 정수 값으로 평가된다 하더라도 이러한 표현식이어서는 안 됩니다. 소수는 허용되지 않습니다.
다음 절들에서는 각 파티션 타입을 생성하는 데 사용할 수 있는 문법의 가능한 모든 형태를 반드시 제공하지는 않습니다. 이에 대한 정보는 Section 15.1.24, “CREATE TABLE Statement”을 참조하십시오.
26.1 Overview of Partitioning in MySQL
26.2.1 RANGE Partitioning