9

char 列に基づいてパーティション分割することは可能ですか?

MySQL 5.1 のドキュメントを確認したところ、整数型のみを使用できるようです。

これは正しいです?または、関数を使用して char を整数に変換できますか?

問題の char フィールドには一意の識別子が含まれています。

4

2 に答える 2

16

MySQL 5.1 のパーティショニングでは、整数列 ( Source ) のみを処理できます。整数以外の列では、いくつかのパーティショニング関数しか使用できません。例えば:

CREATE TABLE ti (id INT, amount DECIMAL(7,2), tr_date DATE)
   ENGINE=INNODB
   PARTITION BY HASH( MONTH(tr_date) )
   PARTITIONS 6;

主キーにテーブルのパーティショニング関数のすべての列が含まれている限り、MySQL 5.1 でキー パーティショニングを使用することもできます。

CREATE TABLE k1 (
   id CHAR(3) NOT NULL PRIMARY KEY,
   value int
)
PARTITION BY KEY(id)
PARTITIONS 10;

一方、MySQL 5.5 では、文字ベースのカラムを含むさまざまなデータ タイプに対して、レンジ カラム パーティショニングまたはリスト カラム パーティショニングを使用できます。

リスト列の例:

CREATE TABLE expenses (
   expense_date DATE NOT NULL,
   category VARCHAR(30),
   amount DECIMAL (10,3)
);

ALTER TABLE expenses
PARTITION BY LIST COLUMNS (category)
(
   PARTITION p01 VALUES IN ('lodging', 'food'),
   PARTITION p02 VALUES IN ('flights', 'ground transportation'),
   PARTITION p03 VALUES IN ('leisure', 'customer entertainment'),
   PARTITION p04 VALUES IN ('communications'),
   PARTITION p05 VALUES IN ('fees')
);

範囲列の例:

CREATE TABLE range_test (
   code CHAR(3),
   value INT
)
PARTITION BY RANGE COLUMNS(code) (
   PARTITION p0 VALUES LESS THAN ('MMM'),
   PARTITION p1 VALUES LESS THAN ('ZZZ')
);

参考文献:

于 2010-09-20T16:25:06.333 に答える