19.2.4.1 LINEAR HASH 파티셔닝
MySQL은 선형 해시도 지원하고 있습니다. 보통의 해시와 다른 점은 선형 해시는 선형 제곱 알고리즘을 사용하여 일반 해시 해시 함수 값의 법을 사용하는 것입니다.
문법적으로는 선형 해시 파티셔닝 및 일반 해시의 유일한 차이점은 다음과 같이 PARTITION BY
절에 LINEAR
키워드가 추가되는 것입니다.
CREATE TABLE employees ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30), hired DATE NOT NULL DEFAULT '1970-01-01', separated DATE NOT NULL DEFAULT '9999-12-31', job_code INT, store_id INT ) PARTITION BY LINEAR HASH( YEAR(hired) ) PARTITIONS 4;
수식 expr
의 경우 선형 해시가되면 레코드가 저장되는 파티션은 num
파티션 중 버티 프로그램 번호 N
입니다. 여기서 N
은 다음의 알고리즘에 따라 도출됩니다.
num
보다 큰 다음 2의 거듭 제곱을 찾습니다. 이 값을V
라고 부르기로합니다. 이것은 다음과 같이 계산할 수 있습니다.V
= POWER(2, CEILING(LOG(2,num
)))(
num
이 13이라고합니다.이 경우LOG(2,13)
는 3.7004397181411입니다.CEILING(3.7004397181411)
는 4,V
=POWER(2,4)
는 16입니다.)N
=F
(column_list
) & (V
- 1)을 설정합니다.N
> =num
사이 :V
= CEIL (V
/ 2)을 설정합니다N
=N
& (V
- 1)을 설정합니다
선형 해시 파티셔닝을 사용하여 6 개의 파티션이있는 테이블 t1
을 다음 문을 사용하여 작성합니다.
CREATE TABLE t1 (col1 INT, col2 CHAR(5), col3 DATE) PARTITION BY LINEAR HASH( YEAR(col3) ) PARTITIONS 6;
col3
컬럼의 값이 '2003-04-14'
및 '1998-10-19'
인 두 개의 레코드를 t1
에 삽입합니다. 이 첫 번째 파티션 번호는 다음과 같이 결정됩니다.
V
= POWER(2, CEILING( LOG(2,6) )) = 8N
= YEAR('2003-04-14') & (8 - 1) = 2003 & 7 = 3 (3 >= 6 is FALSE: record stored in partition #3)
두 번째 레코드가 저장되는 파티션 번호는 다음과 같이 계산됩니다.
V
= 8N
= YEAR('1998-10-19') & (8-1) = 1998 & 7 = 6 (6 >= 6 is TRUE: additional step required)N
= 6 & CEILING(8 / 2) = 6 & 3 = 2 (2 >= 6 is FALSE: record stored in partition #2)
선형 해시로 파티셔닝의 장점은 파티션의 추가, 삭제, 병합 및 분할 속도가 빨라질 것입니다. 이것은 매우 많은 양 (테라 바이트)의 데이터가 포함 된 테이블을 취급 할 때 장점이 될 수 있습니다. 단점은 일반 해시 파티셔닝을 사용하여 획득되는 배분에 비해 데이터가 파티션에 균등하게 배분 될 가능성이 낮은 것입니다.