MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む
このページは機械翻訳したものです。
MySQL 8.0 は LIST COLUMNS パーティショニングのサポートを提供します。 これは LIST パーティショニングのバリアントで、複数のカラムをパーティションキーとして使用でき、整数型以外のデータ型のカラムをパーティショニングカラムとして使用できます。文字列型、DATE、および DATETIME カラムを使用できます (COLUMNS パーティショニングカラムに許可されるデータ型の詳細については、セクション24.2.3「COLUMNS パーティショニング」を参照してください)。
ある会社の顧客が 12 の都市に存在し、販売およびマーケティングのために、それらを次の表に示すように 3 つの都市で構成される 4 つの地域に分類すると想定します。
| 地域 | 都市 |
|---|---|
| 1 | Oskarshamn、Högsby、Mönsterås |
| 2 | Vimmerby、Hultsfred、Västervik |
| 3 | Nässjö、Eksjö、Vetlanda |
| 4 | Uppvidinge、Alvesta、Växjo |
LIST COLUMNS パーティショニングでは、ここで示すように、顧客が所在する都市の名前に基づいてこれらの地域に対応する 4 つのパーティションのいずれかに行を割り当てる、顧客データのテーブルを作成できます。
CREATE TABLE customers_1 (
first_name VARCHAR(25),
last_name VARCHAR(25),
street_1 VARCHAR(30),
street_2 VARCHAR(30),
city VARCHAR(15),
renewal DATE
)
PARTITION BY LIST COLUMNS(city) (
PARTITION pRegion_1 VALUES IN('Oskarshamn', 'Högsby', 'Mönsterås'),
PARTITION pRegion_2 VALUES IN('Vimmerby', 'Hultsfred', 'Västervik'),
PARTITION pRegion_3 VALUES IN('Nässjö', 'Eksjö', 'Vetlanda'),
PARTITION pRegion_4 VALUES IN('Uppvidinge', 'Alvesta', 'Växjo')
);
RANGE COLUMNS によるパーティショニングのように、COLUMNS() 句で式を使用してカラム値を整数に変換する必要はありません (実際、カラム名ではなく式を使用することは COLUMNS() では許可されません)。
DATE および DATETIME カラムを使用することもでき、次の例では、前に示した customers_1 テーブルと同じ名前およびカラムを使用していますが、renewal カラムに基づく LIST COLUMNS パーティショニングを使用して、顧客のアカウントの更新がスケジュールされている 2010 年 2 月の週に応じて、4 つのパーティションのいずれかに行が格納されることを示しています。
CREATE TABLE customers_2 (
first_name VARCHAR(25),
last_name VARCHAR(25),
street_1 VARCHAR(30),
street_2 VARCHAR(30),
city VARCHAR(15),
renewal DATE
)
PARTITION BY LIST COLUMNS(renewal) (
PARTITION pWeek_1 VALUES IN('2010-02-01', '2010-02-02', '2010-02-03',
'2010-02-04', '2010-02-05', '2010-02-06', '2010-02-07'),
PARTITION pWeek_2 VALUES IN('2010-02-08', '2010-02-09', '2010-02-10',
'2010-02-11', '2010-02-12', '2010-02-13', '2010-02-14'),
PARTITION pWeek_3 VALUES IN('2010-02-15', '2010-02-16', '2010-02-17',
'2010-02-18', '2010-02-19', '2010-02-20', '2010-02-21'),
PARTITION pWeek_4 VALUES IN('2010-02-22', '2010-02-23', '2010-02-24',
'2010-02-25', '2010-02-26', '2010-02-27', '2010-02-28')
);
これは機能しますが、関係する日付の数が非常に多くなってきた場合に、定義および保守が面倒になります。そのような場合は通常、RANGE または RANGE COLUMNS パーティショニングを代わりに使用するほうが現実的です。 この場合、パーティショニングキーとして使用するカラムは DATE カラムであるため、次に示すように RANGE COLUMNS パーティショニングを使用します。
CREATE TABLE customers_3 (
first_name VARCHAR(25),
last_name VARCHAR(25),
street_1 VARCHAR(30),
street_2 VARCHAR(30),
city VARCHAR(15),
renewal DATE
)
PARTITION BY RANGE COLUMNS(renewal) (
PARTITION pWeek_1 VALUES LESS THAN('2010-02-09'),
PARTITION pWeek_2 VALUES LESS THAN('2010-02-15'),
PARTITION pWeek_3 VALUES LESS THAN('2010-02-22'),
PARTITION pWeek_4 VALUES LESS THAN('2010-03-01')
);
詳細は、セクション24.2.3.1「RANGE COLUMNS パーティショニング」を参照してください。
また (RANGE COLUMNS パーティショニングと同様に)、COLUMNS() 句で複数のカラムを使用できます。
PARTITION BY LIST COLUMNS() 構文についての詳細は、セクション13.1.20「CREATE TABLE ステートメント」を参照してください。