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 ステートメント」を参照してください。