[+/-]
このセクションでは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 );
日付を使用してのパーティショニングの例はここでも紹介されています。
さらに複雑な日付を使用してのデータベースパーティショニングに関しては、以下を参照してください。
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
構文」を参照してください。