O particionamento LIST COLUMNS é uma variação do particionamento LIST que aceita múltiplas colunas de chave de partição e dispensa o uso de funções de partição para converter valores de coluna em inteiros. É possível utilizar diretamente colunas do tipo string, data e datetime como chaves de partição. Para comparar os dois métodos, consulte a tabela Comparação entre particionamento LIST e particionamento LIST COLUMNS na visão geral.
Sintaxe
Cada partição lista os valores exatos de coluna que lhe pertencem. Os valores devem ser únicos em todas as partições. Utilize a partição opcional DEFAULT para capturar todas as linhas que não correspondam a nenhuma outra partição.
CREATE TABLE ...
PARTITION BY LIST COLUMNS(partition_column_list) [PARTITIONS number]
(
PARTITION part_name VALUES IN (list_bound_value_set),
PARTITION part_name VALUES IN (list_bound_value_set),
...
[ PARTITION part_name VALUES IN (DEFAULT) ]
)
partition_column_list:
partition_column[, partition_column, partition_column, ...]
list_bound_value_set:
list_bound_value[, list_bound_value, list_bound_value, ...]
Limitações
O particionamento LIST COLUMNS não oferece suporte a funções de partição.
Por padrão, uma tabela particionada pode conter até 8.192 partições.
Uma chave de partição pode ser composta por até cinco colunas, por padrão.
Cada nome de partição deve ser único e ter no máximo 16 caracteres, por padrão.
Para usar uma coluna TIMESTAMP como chave de partição, aplique a função
UNIX_TIMESTAMPa essa coluna.
Tipos de dados suportados
O particionamento LIST COLUMNS aceita os seguintes tipos de dados para colunas de chave de partição:
Tipos inteiros: BIGINT, BIGINT UNSIGNED, INT, INT UNSIGNED, MEDIUMINT, MEDIUMINT UNSIGNED, SMALLINT, SMALLINT UNSIGNED, TINYINT, TINYINT UNSIGNED
Tipos de data e hora: DATETIME, DATE, TIMESTAMP
Tipos de string: CHAR, VARCHAR
Tipo de ponto fixo: DECIMAL (os dígitos fracionários devem ser 0)
Exemplos
Particionamento por coluna de string
Um caso de uso comum consiste em direcionar linhas para partições com base em uma coluna de string, como região ou categoria. O exemplo abaixo crie uma tabela de clientes particionada pelo nome da cidade, agrupando as cidades em regiões de vendas:
CREATE TABLE customers (
id BIGINT NOT NULL AUTO_INCREMENT,
name VARCHAR(50),
city VARCHAR(30),
PRIMARY KEY (id)
)
PARTITION BY LIST COLUMNS(city)
(
PARTITION p_north VALUES IN ('Beijing', 'Tianjin', 'Shenyang'),
PARTITION p_east VALUES IN ('Shanghai', 'Nanjing', 'Hangzhou'),
PARTITION p_south VALUES IN ('Guangzhou', 'Shenzhen', 'Xiamen'),
PARTITION p_other VALUES IN (DEFAULT)
);
A partição p_other captura todas as linhas em que city não corresponde a nenhum dos valores listados.
Particionamento por chave de partição composta
Utilize uma chave de partição composta (várias colunas) quando for necessário direcionar linhas com base em uma combinação de valores. O exemplo a seguir particiona pedidos usando tanto birthday quanto id:
CREATE TABLE tb_lc (
id BIGINT NOT NULL AUTO_INCREMENT,
bid INT,
name VARCHAR(30),
birthday DATETIME NOT NULL,
PRIMARY KEY (id)
)
PARTITION BY LIST COLUMNS(birthday, id)
(
PARTITION p1 VALUES IN (('2020-01-01', 1000), ('2020-01-01', 2000)),
PARTITION p2 VALUES IN (('2021-01-01', 1000), ('2021-01-01', 2000)),
PARTITION p3 VALUES IN (('2022-01-01', 1000), ('2022-01-01', 2000)),
PARTITION pm VALUES IN (DEFAULT)
);
A partição pm é uma partição DEFAULT que captura as linhas não correspondidas por p1, p2 ou p3.
Quando a lista de valores discretos se torna extensa (por exemplo, centenas de datas), o particionamento RANGE COLUMNS geralmente é mais prático para definição e manutenção.