Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


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 は次のアルゴリズムに従って導出されます。

  1. 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 です。)

  2. N = F(column_list) & (V - 1) を設定します。

  3. 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' である 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 & CEILING(8 / 2)
  = 6 & 3
  = 2

(2 >= 6 is FALSE: record stored in partition #2)

線形ハッシュによるパーティショニングの利点は、パーティションの追加、削除、マージ、および分割の速度が向上することです。これは、非常に大量 (テラバイト) のデータが含まれるテーブルを扱うときに利点になることがあります。欠点は、通常のハッシュパーティショニングを使用して獲得される配分と比べて、データがパーティションに均等に配分される可能性が低いことです。