サーチ…


備考

  • RANGEパーティショニング 。このタイプのパーティショニングは、指定された範囲内の列値に基づいて行をパーティションに割り当てます。

  • LISTパーティショニング 。 RANGEによるパーティショニングと同様ですが、パーティションが離散値のセットの1つに一致する列に基づいて選択される点が異なります。

  • HASHパーティショニング 。このタイプのパーティションでは、テーブルに挿入される行の列値を操作するユーザー定義式によって返された値に基づいてパーティションが選択されます。この関数は、負でない整数値を生成するMySQLで有効な任意の式で構成できます。このタイプの拡張であるLINEAR HASHも使用できます。

  • KEYパーティショニング 。このタイプのパーティショニングは、評価されるべき1つ以上のカラムだけが提供され、MySQLサーバが独自のハッシュ関数を提供する点を除いて、HASHによるパーティショニングに似ています。これらの列には整数値以外の値を入れることができます。これは、MySQLによって提供されるハッシュ関数が列のデータ型に関係なく整数結果を保証するためです。このタイプの拡張子LINEAR KEYも使用できます。

RANGEパーティショニング

範囲で区切られた表は、各区画に区切り式の値が所定の範囲内にある行を含むように区切られます。範囲は連続している必要がありますが重複はなく、 VALUES LESS THAN演算子を使用して定義されています。次のいくつかの例では、次のようなテーブルを作成して、1から20までの20のビデオストアチェーンの人事記録を保持するとします。

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 NOT NULL,
    store_id INT NOT NULL
);

この表は、必要に応じてさまざまな方法で範囲ごとにパーティション化できます。 1つの方法は、 store_id列を使用することです。たとえば、次のようにPARTITION BY RANGE句を追加して、4つの方法で表を分割することができます。

ALTER TABLE employees PARTITION BY RANGE (store_id) (
    PARTITION p0 VALUES LESS THAN (6),
    PARTITION p1 VALUES LESS THAN (11),
    PARTITION p2 VALUES LESS THAN (16),
    PARTITION p3 VALUES LESS THAN MAXVALUE
);

MAXVALUEは、可能な限り大きな整数値よりも大きい整数値を表します(数学的に言えば、最小の上限として使用されます)。

MySQLの公式ドキュメントに基づいています

LISTパーティショニング

リスト・パーティション化は、多くの点でレンジ・パーティション化に似ています。 RANGEによるパーティショニングの場合と同様に、各パーティションを明示的に定義する必要があります。 2つのタイプのパーティション化の主な違いは、リスト・パーティション化では、各パーティションが、一連の連続した範囲のセットではなく、値リストのセットの1つにある列値のメンバーシップに基づいて定義および選択されることです。値。これは使用して行われPARTITION BY LIST(expr) expr列の値または列の値に基づいて表現され、整数値を返し、その後によって各パーティションを定義するVALUES IN (value_list)value_list Aですカンマで区切られた整数のリスト。

以下の例では、パーティション化するテーブルの基本的な定義は、ここに示すCREATE TABLEステートメントによって提供されるものとします。

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
);

次の表に示すように、4つのフランチャイズに20のビデオストアが分散しているとします。

領域店舗ID番号
3,5,6,9,17
1,2,10,11,19,20
西 4,12,13,14,18
中央 7,8,15,16

同じ領域に属するストアの行が同じパーティションに格納されるようにこの表をパーティション化するには

ALTER TABLE employees PARTITION BY LIST(store_id) (
    PARTITION pNorth VALUES IN (3,5,6,9,17),
    PARTITION pEast VALUES IN (1,2,10,11,19,20),
    PARTITION pWest VALUES IN (4,12,13,14,18),
    PARTITION pCentral VALUES IN (7,8,15,16)
);

MySQLの公式ドキュメントに基づいています

ハッシュパーティショニング

HASHによるパーティショニングは、主に、所定の数のパーティション間でのデータの均等な分散を保証するために使用されます。範囲またはリスト・パーティション化では、指定された列値または列値のセットが格納されるパーティションを明示的に指定する必要があります。ハッシュパーティショニングでは、MySQLがこれを処理し、ハッシュされる列の値と、分割されたテーブルが分割されるパーティションの数に基づいて、列の値または式を指定するだけで済みます。

次の文は、store_id列のハッシングを使用するテーブルを作成し、4つのパーティションに分割します。

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 HASH(store_id)
PARTITIONS 4;

PARTITIONS句を指定しないと、パーティションの数はデフォルトで1になります。

MySQLの公式ドキュメントに基づいています



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow