MySQL 5.1 リファレンスマニュアル :: 15 パーティショニング :: 15.2 パーティショニングのタイプ
« 15.1 MySQL パーティショニングの概要

15.2.1 RANGE パーティショニング »
Section Navigation      [Toggle]
  • 15 パーティショニング
  • 15.1 MySQL パーティショニングの概要
  • 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.3 パーティショニング管理
  • 15.4 パーティションの刈り込み
  • 15.5 パーティショニングの制約と制限

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 値の取り扱い

このセクションではMySQL 5.1で提供されているパーティショニングのタイプについて記述されています。これらは:

  • RANGE パーティショニング:あるレンジに当てはまるカラム値に対するパーティションに行を割り当てます。項15.2.1. 「RANGE パーティショニング」 を参照してください。

  • LIST パーティショニング:レンジによるパーティショニングと似ていますが、離散的値と合致するカラムに対してパーティションが選択されます。項15.2.2. 「LIST パーティショニング」 を参照してください。

  • HASH パーティショニング:テーブルに挿入される行のカラム値に作用する、ユーザによって定義された表現が返す値に対してパーティションが選択されます。関数は、MySQL内で非ネガティブ整数値を生み出す有効な表現で構成されます。項15.2.3. 「HASH パーティショニング」 を参照してください。

  • KEY パーティショニング:ハッシュによるパーティショニングと似ていますが、評価されるひとつか1つ以上のカラムが提供され、MySQL サーバは自身のハッシュ関数を提供している。MySQL に提供されるハッシュ関数はカラムデータタイプに左右されない整数の値を約束するため、これらのカラムは整数値以外の値を含むことができます。項15.2.4. 「KEY パーティショニング」 を参照してください。

非常に一般的なデータベースパーティショニングは、日付によってデータを分けることで行われます。いくつかのデータベースシステムは明確なデータパーティショニングをサポートしています。これは、MySQL 5.1では実装されません。ただし、MySQLでDATE、TIME、またはDATETIMEカラムを使用して、もしくはそれらのカラムを使用してできた表現をもとにパーティショニングされたスキーマを作成することは難しくありません。

KEY またはLINEAR KEY を使用してパーティショニングする場合、DATE、TIME、またはDATETIME カラムを、カラム値の改良をすることなくパーティショニングカラムとして使用することができます。例えば、このテーブル作成ステートメントはMySQLにおいて完全に有効です。

CREATE TABLE members (
    firstname VARCHAR(25) NOT NULL,
    lastname VARCHAR(25) NOT NULL,
    username VARCHAR(16) NOT NULL,
    email VARCHAR(35),
    joined DATE NOT NULL
)
PARTITION BY KEY(joined)
PARTITIONS 6;

しかし、MySQL の他のタイプのパーティショニングは整数値もしくは NULL を生み出すパーティショニング表現が要求されます。RANGE、LIST、HASH または LINEAR HASH を使用して日付によるパーティショニングを使用する場合は、DATE、TIME、または DATETIME カラムで作動し、且つ以下に示されるようにそのような値を返す関数を使用できます。

CREATE TABLE members (
    firstname VARCHAR(25) NOT NULL,
    lastname VARCHAR(25) NOT NULL,
    username VARCHAR(16) NOT NULL,
    email VARCHAR(35),
    joined DATE NOT NULL
)
PARTITION BY RANGE( YEAR(joined) ) (
    PARTITION p0 VALUES LESS THAN (1960),
    PARTITION p1 VALUES LESS THAN (1970),
    PARTITION p2 VALUES LESS THAN (1980),
    PARTITION p3 VALUES LESS THAN (1990),
    PARTITION p4 VALUES LESS THAN MAXVALUE
);

日付を使用してのパーティショニングの例はここでも紹介されています。

  • 項15.2.1. 「RANGE パーティショニング」

  • 項15.2.3. 「HASH パーティショニング」

  • 項15.2.3.1. 「LINEAR HASH パーティショニング」

さらに複雑な日付を使用してのデータベースパーティショニングに関しては、以下を参照してください。

  • 項15.4. 「パーティションの刈り込み」

  • 項15.2.5. 「サブパーティショニング」

MySQL パーティショニングは TO_DAYS() と YEAR() 関数での使用に対して最適化されています。ただし、整数や NULL を返す日付・時間関数を使用できます。たとえば、WEEKDAY()、DAYOFYEAR()、または MONTH() を使用することができます。詳細については、項11.5. 「日付時刻関数」 を参照してください。

— は、使用されているパーティショニングの種類によらず、— は重要で、パーティショニングは常に 0 に始まり自動的且つシーケンスにしたがって作成されます。新しい行がパーティショニングされたテーブルに挿入された時、正しいパーティションを識別するのに使用されるのはこれらのパーティション番号です。例えば、ユーザのテーブルが4つのパーティションを使用している場合、これらのパーティションには 0、1、2、そして 3 と番号付けされます。RANGE と LIST パーティショニング型に関しては、各パーティション番号ごとにパーティションが定義されていることが必要です。HASH パーティショニングに関しては、使用されているユーザ関数は 0 より大きい整数の値を返さなければいけません。KEY パーティショニングでは、MySQL サーバが内部で使用しているハッシュ関数によってこの問題は自動的に対処されることになります。

パーティションの名前は、一般的に他のMySQL 識別子を支配するルールに沿っています。例えば、テーブルやデータベースのそれと同じように扱われます。ただし、パーティションの名前は大文字・小文字によって区別されないので、注意してください。例えば、以下の CREATE TABLE ステートメントは失敗します。

mysql> CREATE TABLE t2 (val INT)
    -> PARTITION BY LIST(val)(
    ->     PARTITION mypart VALUES IN (1,3,5),
    ->     PARTITION MyPart VALUES IN (2,4,6)
    -> );
ERROR 1488 (HY000): Duplicate partition name mypart

これは mypart と MyPart の違いをMySQLが察知できないために失敗します。

このテーブルのパーティションの数を指定する時、それは正の値であって、ゼロで始まらない、ゼロではない整数文字であり、0.8E+01 や 6-2 は整数として成立しても使用することはできません。(MySQL 5.1.12からは、小数点の分数は切り捨てられるのではなく、完全に使用不可能となりました。)

続くセクションでは、各パーティショニング型を作成するためのあらゆる構文を提供しているわけではありません。追加情報は、項12.1.8. 「CREATE TABLE 構文」を参照してください。

Copyright © 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