O particionamento por intervalo divide os dados da tabela em partições com base no valor de uma coluna dentro de um intervalo definido. Cada partição armazena linhas cuja chave de partição é menor que um valor limite especificado, e esses limites devem ser estritamente incrementais.
O particionamento por intervalo funciona bem quando você precisa:
Consultar ou excluir dados por período — descarte uma partição inteira em vez de executar um comando
DELETEcom filtro de data, o que é significativamente mais rápido em tabelas grandes.Particionar por um intervalo numérico contínuo — como valores de vendas, IDs ou pontuações.
Melhorar o desempenho de consultas via pruning de partições — consultas que filtram pela chave de partição podem ignorar completamente as partições irrelevantes.
O PolarDB for MySQL oferece suporte a duas formas: PARTITION BY RANGE (baseada em expressão, coluna única) e PARTITION BY RANGE COLUMNS (baseada em colunas, com suporte a múltiplas colunas e mais tipos de dados).
Sintaxe
CREATE TABLE ... PARTITION BY RANGE {(expr) | COLUMNS(column_list)}
(partition_definition [, partition_definition] ...);
Em que partition_definition é:
PARTITION partition_name
VALUES LESS THAN {(value | value_list) | MAXVALUE}
Parâmetros
|
Parâmetro |
Descrição |
|
|
Expressão de partição. Deve resultar em um valor INT. Não há suporte para tipos string. |
|
|
Lista de colunas de chave de partição para uso com |
|
|
Valor do limite superior de uma partição. |
|
|
Lista de valores de limite superior, um por coluna. Utilizado com |
|
|
Valor máximo da partição. Sempre adicione uma partição |
|
|
Nome da partição. Deve ser único na tabela. |
RANGE vs RANGE COLUMNS
|
Recurso |
** |
** |
|
Quantidade de chaves de partição |
Apenas coluna única |
Uma ou mais colunas |
|
Expressões |
Suportadas |
Não suportadas; apenas nomes de colunas |
|
Tipos de dados suportados |
INT (a expressão deve resultar em INT) |
INT, tipos string, DATE, DATETIME |
Utilize RANGE COLUMNS quando precisar particionar diretamente por uma coluna DATE ou DATETIME, ou quando for necessária uma chave de partição composta por várias colunas.
Exemplos
Particionamento por intervalo numérico
O exemplo a seguir particiona uma tabela de vendas pela coluna amount. Cada partição contém linhas em que amount é menor que o valor limite. A última partição usa MAXVALUE para capturar todas as linhas restantes.
CREATE TABLE sales_range
(
dept_no INT,
part_no INT,
country VARCHAR(20),
date DATE,
amount INT
)
PARTITION BY RANGE(amount)
(
PARTITION p0 VALUES LESS THAN (1000),
PARTITION p1 VALUES LESS THAN (2000),
PARTITION p2 VALUES LESS THAN (3000),
PARTITION p3 VALUES LESS THAN (MAXVALUE)
);
Particionamento por coluna de data (RANGE COLUMNS)
Com RANGE COLUMNS, é possível particionar diretamente por uma coluna DATE sem envolvê-la em uma expressão. O exemplo abaixo cria partições mensais na coluna create_date.
CREATE TABLE sales_range_columns
(
dept_no INT,
part_no INT,
country VARCHAR(20),
create_date DATE,
amount INT
)
PARTITION BY RANGE COLUMNS(create_date)
(
PARTITION p1 VALUES LESS THAN ('2023-01-01'),
PARTITION p2 VALUES LESS THAN ('2023-02-01'),
PARTITION p3 VALUES LESS THAN ('2023-03-01'),
PARTITION p4 VALUES LESS THAN ('2023-04-01')
);
Particionamento por múltiplas colunas (RANGE COLUMNS)
O RANGE COLUMNS permite o uso de chaves de partição compostas.
CREATE TABLE sales_range_columns
(
dept_no INT,
part_no INT,
country VARCHAR(20),
date DATE,
amount INT
)
PARTITION BY RANGE COLUMNS(dept_no, part_no)
(
PARTITION p1 VALUES LESS THAN (1000, MAXVALUE),
PARTITION p2 VALUES LESS THAN (2000, MAXVALUE),
PARTITION p3 VALUES LESS THAN (3000, MAXVALUE),
PARTITION p4 VALUES LESS THAN (4000, MAXVALUE)
);