O particionamento LIST atribui linhas a partições com base na correspondência entre o valor de uma coluna e um conjunto predefinido de valores discretos. Utilize esse método quando os dados se enquadram em categorias bem definidas — como regiões de vendas, tipos de produtos ou códigos de status — e você deseja isolar cada categoria em sua própria partição para otimizar consultas e operações no nível da partição, como exclusões em massa.
O PolarDB for MySQL oferece suporte a duas variantes:
LIST: particiona por uma única expressão INT.
LIST COLUMNS: particiona por uma ou mais colunas dos tipos INT, string, DATE ou DATETIME.
Sintaxe
CREATE TABLE ... PARTITION BY LIST {(expr) | COLUMNS(column_list)}
(
partition_definition [, partition_definition] ...
);
Cada partition_definition segue este formato:
PARTITION partition_name
VALUES IN (value_list)
Parâmetros
|
Parâmetro |
Descrição |
|
|
Expressão de particionamento. Deve retornar um valor INT. Não há suporte para expressões de string. |
|
|
Lista de colunas de chave de particionamento usada com LIST COLUMNS. Não aceita expressões; permite apenas referências diretas a colunas. |
|
|
Valores enumerados que mapeiam as linhas para esta partição. Os valores devem ser exclusivos em todas as partições da tabela. |
|
|
Nome da partição. Deve ser exclusivo na tabela. |
Restrições
LIST:
A expressão deve retornar um valor INT. Expressões de string não são aceitas.
Aceita apenas chave de particionamento de coluna única.
LIST COLUMNS:
Não aceita expressões; permite somente referências a colunas.
Aceita chaves de particionamento com múltiplas colunas.
Tipos de coluna compatíveis: INT, tipos de string, DATE e DATETIME.
Exemplos
Particionamento por uma coluna INT (LIST)
No exemplo abaixo, uma tabela de vendas é particionada pela coluna amount. Linhas com valores 1 ou 2 em amount vão para a partição p0, valores 3 ou 4 para p1 e valores 5 ou 6 para p2.
CREATE TABLE sales_list
(
dept_no INT,
part_no INT,
country VARCHAR(20),
date DATE,
amount INT
)
PARTITION BY LIST (amount)
(
PARTITION p0 VALUES IN (1, 2),
PARTITION p1 VALUES IN (3, 4),
PARTITION p2 VALUES IN (5, 6)
);
Particionamento por uma coluna de string (LIST COLUMNS)
Como o LIST COLUMNS aceita colunas do tipo string, é possível particionar diretamente por um valor de texto sem mapeamento numérico. O exemplo a seguir agrupa países em três partições regionais.
CREATE TABLE sales_list_columns
(
dept_no INT,
part_no INT,
country VARCHAR(20),
date DATE,
amount INT
)
PARTITION BY LIST COLUMNS(country)
(
PARTITION europe VALUES IN ('FRANCE', 'ITALY'),
PARTITION asia VALUES IN ('INDIA', 'PAKISTAN'),
PARTITION americas VALUES IN ('US', 'CANADA')
);