無料PHPプログラム

MySQL 5.1 リファレンスマニュアル :: 15 パーティショニング :: 15.2 パーティショニングのタイプ :: 15.2.4 KEY パーティショニング
« 15.2.3.1 LINEAR HASH パーティショニング

15.2.5 サブパーティショニング »
Section Navigation      [Toggle]
  • 15.2 パーティショニングのタイプ
  • 15.2.1 RANGE パーティショニング
  • 15.2.2 LIST パーティショニング
  • 15.2.3 HASH パーティショニング
  • 15.2.4 KEY パーティショニング
  • 15.2.5 サブパーティショニング
  • 15.2.6 MySQLパーティショニングの NULL 値の取り扱い

15.2.4. KEY パーティショニング

キーによるパーティショニングはハッシュによるパーティショニングと似ていますが、ハッシュパーティショニングがユーザによって定義された表現を使用するところ、キーパーティショニングのハッシュ関数は MySQL サーバによって提供されます。MySQL クラスタはこのために MD5() を使用します。他のストレージエンジンを使用しているテーブルには、サーバは自身の PASSWORD() アルゴリズムに基づいた内部ハッシュ関数を使用します。

CREATE TABLE ... PARTITION BY KEY の構文ルールは、ハッシュによってパーティショニングされたテーブルを作成するものと類似しています。最大の相違点は

  • HASH よりも KEY が使用されることにあります。

  • KEY は 1 以上のカラム名のみとります。MySQL 5.1.5に始まり、パーティショニングキーとして使用されるカラムはテーブルのプライマリキーの一部もしくは前部を構成しなければいけません。これは、テーブルにプライマリキーがある場合のみです。

    MySQL 5.1.6に始まり、KEY は 0 以上のカラム名をとります。パーティショニングキーとしてカラム名が特定されていない場合、存在する場合に限ってテーブルのプライマリキーが使用されます。たとえば、以下の CREATE TABLE ステートメントはMySQL 5.1.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;
    

    他のパーティショニングの種類が指定された場合、先のステートメントは有効 ではありません。(注:この場合、単純に PARTITION BY KEY() を使用すれば、有効である上 PARTITION BY KEY(s1) と同等の効果となります。これは、s1 がテーブルのプライマリキーとなるからです。

    この件の詳細については 項15.5. 「パーティショニングの制約と制限」 を参照してください。

    注:MySQL 5.1.6に始まり、NDB Cluster ストレージエンジンを使用しているテーブルは、テーブルのプライマリキーをパーティショニングキーとして、KEY によって暗黙にパーティショニングされています。クラスタテーブルに明確にプライマリキーがない場合、各クラスタテーブルの NDB ストレージエンジンによって生成された 「hidden」 プライマリキーがパーティショニングキーとして使用されます。

    重要NDB Cluster 以外のMySQLストレージ エンジンを使用しているキーパーティショニングされたテーブルは、ALTER TABLE DROP PRIMARY KEY を実行することができません。なぜなら、実行した場合は以下のエラーテキストが現れるからです:ERROR 1466 (HY000): Field in list of fields for partition function not found in table。これは KEY によってパーティショニングされたMySQLクラスタテーブルにとっては問題になりません。その場合、「hidden」プライマリキーをテーブルの新しいパーティショニングキーとしてテーブルが再構築されます。章?14. MySQL Cluster を参照してください。

リニアキーを使用してテーブルをパーティショニングすることもできます。ここに単純な例を記します。

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

LINEAR を使用するのは KEY パーティショニングに対しても HASH パーティショニングに対しても同様の効果をもたらします。この時パーティショニングはモジュロ算術よりも二乗アルゴリズムを使用してパーティショニング番号が派生されます。アルゴリズムとその意味合いについては、 項15.2.3.1. 「LINEAR HASH パーティショニング」 を参照してください。

Copyright c 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates

無料CGI PHPスクリプト | 新着情報スクリプト | 営業日カレンダー | PHPマニュアル | MySQLマニュアル | PEARマニュアル

Copyright (c) 2010 jmcodex.com All rights reserved.