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