sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo particionar una tabla MySQL basada en la columna char?

La partición en MySQL 5.1 solo puede tratar con columnas enteras (Fuente ). Solo puede usar pocas funciones de partición en columnas no enteras. Por ejemplo:

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

También puede usar partición de claves en MySQL 5.1, siempre que la clave principal incluya todas las columnas en la función de partición de la tabla:

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

Por otro lado, en MySQL 5.5, puede usar partición de columna de rango o particionamiento de columna de lista en una amplia variedad de tipos de datos, incluidas las columnas basadas en caracteres.

Ejemplo de columnas de lista:

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')
);

Ejemplo de columnas de rango:

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')
);

Lectura adicional: