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


19.2.5 KEY パーティショニング

キーによるパーティショニングはハッシュによるパーティショニングと似ていますが、ハッシュパーティショニングはユーザー定義の式を使用し、キーパーティショニング用のハッシュ関数は MySQL サーバーによって提供されます。MySQL Cluster はこのために MD5() を使用します。ほかのストレージエンジンを使用するテーブルの場合、サーバーは PASSWORD() と同じアルゴリズムに基づく独自の内部ハッシュ関数を使用します。

CREATE TABLE ... PARTITION BY KEY の構文規則は、ハッシュによってパーティション化されたテーブルを作成する場合のものと似ています。主な違いを次に示します。

  • HASH ではなく KEY が使用されます。

  • KEY は、0 個以上のカラム名のリストのみを取ります。パーティショニングキーとして使用されるカラムは、テーブルの主キーの一部またはすべてを構成している必要があります (テーブルにそれがある場合)。パーティショニングキーとしてカラム名を指定しない場合は、テーブルの主キーが使用されます (ある場合)。たとえば、次の CREATE TABLE ステートメントは MySQL 5.6 で有効です。

    CREATE TABLE k1 (
        id INT NOT NULL PRIMARY KEY,
        name VARCHAR(20)
    )
    PARTITION BY KEY()
    PARTITIONS 2;
    

    主キーはないけれども一意キーはある場合は、パーティショニングキーに一意キーが使用されます。

    CREATE TABLE k1 (
        id INT NOT NULL,
        name VARCHAR(20),
        UNIQUE KEY (id)
    )
    PARTITION BY KEY()
    PARTITIONS 2;
    

    ただし、一意キーカラムが NOT NULL として定義されていない場合、前のステートメントは失敗します。

    どちらの場合も、パーティショニングキーは id カラムです。ただし、SHOW CREATE TABLE の出力や INFORMATION_SCHEMA.PARTITIONS テーブルの PARTITION_EXPRESSION カラムには表示されません。

    ほかのパーティショニングタイプの場合と異なり、KEY によるパーティショニングに使用されるカラムは、整数または NULL 値に制限されません。たとえば、次の CREATE TABLE ステートメントは有効です。

    CREATE TABLE tm1 (
        s1 CHAR(32) PRIMARY KEY
    )
    PARTITION BY KEY(s1)
    PARTITIONS 10;
    

    ほかのパーティショニングタイプが指定された場合、前のステートメントは有効でなくなります(この場合、s1 はテーブルの主キーであるため、単純に PARTITION BY KEY() を使用することも有効であり、PARTITION BY KEY(s1) と同じ効果があります)。

    この問題の詳細については、セクション19.6「パーティショニングの制約と制限」を参照してください。

    注記

    NDB ストレージエンジンを使用するテーブルは、テーブルの主キーをパーティショニングキーとして使用して、KEY によって暗黙的にパーティション化されます。MySQL Cluster テーブルに明示的な主キーがない場合は、NDB ストレージエンジンによって各 MySQL Cluster テーブルに生成される隠し主キーが、パーティショニングキーとして使用されます。

    NDB テーブルに明示的なパーティショニングスキームを定義する場合は、テーブルに明示的な主キーが必要であり、パーティショニング式に使用されるカラムがこのキーの一部である必要があります。ただし、テーブルがのパーティショニング式を使用する (つまり、カラム参照なしの PARTITION BY KEY()) 場合、明示的な主キーは必要ありません。

    このパーティショニングは、ndb_desc ユーティリティー (-p オプション付き) を使用して確認できます。

    重要

    キーによってパーティション化されたテーブルの場合は、ALTER TABLE DROP PRIMARY KEY を実行できません。それを実行すると次のエラーが生成されます: ERROR 1466 (HY000): Field in list of fields for partition function not found in table。これは、KEY によってパーティション化された MySQL Cluster テーブルの場合は問題ではありません。そのような場合は、隠し主キーをテーブルの新しいパーティショニングキーとして使用してテーブルが再編成されます。第18章「MySQL Cluster NDB 7.3 および MySQL Cluster NDB 7.4を参照してください。

リニアキーによってテーブルをパーティション化することもできます。次に、単純な例を示します。

CREATE TABLE tk (
    col1 INT NOT NULL,
    col2 CHAR(5),
    col3 DATE
)
PARTITION BY LINEAR KEY (col1)
PARTITIONS 3;

LINEAR を使用することは、HASH パーティショニングの場合と同じ効果が KEY パーティショニングにあり、パーティショニング番号は法演算ではなく二乗アルゴリズムを使用して導出されます。このアルゴリズムの説明およびその影響については、セクション19.2.4.1「LINEAR HASH パーティショニング」を参照してください。


User Comments
Sign Up Login You must be logged in to post a comment.