このページは機械翻訳したものです。
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
を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'
である 2 つのレコードを t1
に挿入するとします。 これらの 1 番目のパーティション番号は次のように決定されます。
V = POWER(2, CEILING( LOG(2,6) )) = 8
N = YEAR('2003-04-14') & (8 - 1)
= 2003 & 7
= 3
(3 >= 6 is FALSE: record stored in partition #3)
2 番目のレコードが格納されるパーティションの番号は、次のように計算されます。
V = 8
N = YEAR('1998-10-19') & (8 - 1)
= 1998 & 7
= 6
(6 >= 6 is TRUE: additional step required)
N = 6 & ((8 / 2) - 1)
= 6 & 3
= 2
(2 >= 6 is FALSE: record stored in partition #2)
線形ハッシュによるパーティショニングの利点は、パーティションの追加、削除、マージ、および分割の速度が向上することです。これは、非常に大量 (テラバイト) のデータが含まれるテーブルを扱うときに利点になることがあります。 欠点は、通常のハッシュパーティショニングを使用して獲得される配分と比べて、データがパーティションに均等に配分される可能性が低いことです。