このページは機械翻訳したものです。
MySQL は線形ハッシュもサポートしています。通常のハッシュと異なるところは、線形ハッシュは線形二乗アルゴリズムを使用し、通常のハッシュはハッシュ関数の値の法を使用することです。
構文的には、リニアハッシュパーティショニングと通常のハッシュの唯一の違いは、次に示すように、PARTITION BY
句に LINEAR
キーワードが追加されていることです。
Press CTRL+C to copyCREATE 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
と呼ぶことにします。これは次のように計算できます。Press CTRL+C to copyV = 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
を次のステートメントを使用して作成するとします。
Press CTRL+C to copyCREATE 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 番目のパーティション番号は次のように決定されます。
Press CTRL+C to copyV = 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 番目のレコードが格納されるパーティションの番号は、次のように計算されます。
Press CTRL+C to copyV = 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)
線形ハッシュによるパーティショニングの利点は、パーティションの追加、削除、マージ、および分割の速度が向上することです。これは、非常に大量 (テラバイト) のデータが含まれるテーブルを扱うときに利点になることがあります。 欠点は、通常のハッシュパーティショニングを使用して獲得される配分と比べて、データがパーティションに均等に配分される可能性が低いことです。