Todos os produtos
Search
Central de documentação

PolarDB:Particionamento RANGE

Última atualização: Jun 28, 2026

O particionamento RANGE divide as linhas da tabela em partições com base na inclusão do valor de uma coluna em um intervalo definido. Cada partição armazena linhas cujos valores são menores que o limite especificado, tornando essa abordagem ideal para dados de séries temporais e sequências numéricas ordenadas.

Quando usar o particionamento RANGE

O particionamento RANGE é especialmente útil quando:

  • Os dados têm dimensão temporal: Armazene logs, eventos ou transações por data e remova dados antigos eficientemente com ALTER TABLE ... DROP PARTITION, em vez de executar grandes consultas DELETE.

  • As consultas filtram pela chave de partição: Mecanismos compatíveis com MySQL ignoram partições inteiras se a cláusula WHERE corresponder à chave de partição, melhorando o desempenho em tabelas grandes.

  • Os dados crescem monotonicamente: IDs de pedidos, sequências de eventos ou carimbos de data/hora mapeiam naturalmente para intervalos incrementais, mantendo estáveis os limites das partições.

Para comparar o particionamento RANGE ao particionamento RANGE COLUMNS, consulte a tabela Comparação entre particionamento RANGE e particionamento RANGE COLUMNS na visão geral dos tipos de partição.

Sintaxe

CREATE TABLE ...
PARTITION BY RANGE(partition_expr) [PARTITIONS number]
(
  PARTITION part_name VALUES LESS THAN (range_bound_value),
  PARTITION part_name VALUES LESS THAN (range_bound_value),
  ...
)

partition_expr:
    partition_column
  | partition_func(partition_column)

-- Supported partitioning functions
partition_func:
    TO_DAYS
  | TO_MONTHS
  | TO_WEEKS
  | TO_SECOND
  | UNIX_TIMESTAMP
  | MONTH
  | DAYOFWEEK
  | DAYOFMONTH
  | DAYOFYEAR
  | SUBSTR
  | SUBSTRING
  | RIGHT
  | LEFT

Parâmetros principais:

Parâmetro

Descrição

partition_expr

Expressão que determina a partição de cada linha. Use apenas o nome da coluna ou aplique uma função de particionamento compatível.

partition_func

Função integrada que transforma o valor da coluna antes da comparação. Compatível apenas com chaves de partição de coluna única.

part_name

Nome exclusivo da partição, limitado a 16 caracteres.

range_bound_value

Limite superior exclusivo da partição. Os limites devem ser estritamente ascendentes. Use MAXVALUE como limite superior abrangente na última partição.

Limitações

Limitação

Detalhes

Funções de particionamento

Compatíveis apenas com chaves de partição de coluna única. Não há suporte para chaves de partição multicolumn (vetoriais).

Funções aninhadas

O sistema não aceita funções de particionamento aninhadas.

Comprimento do nome da partição

Deve ser exclusivo e ter no máximo 16 caracteres.

Colunas TIMESTAMP

Use obrigatoriamente a função de particionamento UNIX_TIMESTAMP se a coluna da chave de partição utilizar um tipo sensível a fuso horário, como TIMESTAMP.

Máximo de partições

Até 8.192 partições por tabela.

Máximo de colunas na chave de partição

Até cinco colunas.

Exemplos

Particionar por data usando uma função de particionamento

Use TO_DAYS para converter uma coluna DATETIME em contagem de dias e particione com base nesses valores. Essa é a abordagem padrão para particionamento RANGE temporal com colunas DATETIME ou DATE.

CREATE TABLE tb_r_fn(
  id bigint NOT NULL AUTO_INCREMENT,
  bid int,
  name varchar(30),
  birthday datetime NOT NULL,
  PRIMARY KEY(id)
)
PARTITION BY RANGE(TO_DAYS(birthday))
(
  PARTITION p1 VALUES LESS THAN(TO_DAYS('2020-01-01')),
  PARTITION p2 VALUES LESS THAN(TO_DAYS('2021-01-01')),
  PARTITION p3 VALUES LESS THAN(TO_DAYS('2022-01-01')),
  PARTITION pm VALUES LESS THAN(MAXVALUE)
);

Em colunas TIMESTAMP, use UNIX_TIMESTAMP em vez de TO_DAYS. Para outras funções compatíveis, consulte Funções de particionamento.

Particionar por intervalo de inteiros sem função de particionamento

Se a chave de partição for uma coluna inteira, referencie-a diretamente sem aplicar função de particionamento.

CREATE TABLE tb_r(
  id bigint NOT NULL AUTO_INCREMENT,
  bid int,
  name varchar(30),
  birthday datetime NOT NULL,
  PRIMARY KEY(id)
)
PARTITION BY RANGE(id)
(
  PARTITION p1 VALUES LESS THAN(1000),
  PARTITION p2 VALUES LESS THAN(2000),
  PARTITION p3 VALUES LESS THAN(3000),
  PARTITION pm VALUES LESS THAN(MAXVALUE)
);

Particionar por múltiplas colunas (conversão automática para RANGE COLUMNS)

Ao especificar uma chave de partição multicolumn (vetorial) na cláusula PARTITION BY RANGE(...), o PolarDB for Xscale converte automaticamente a definição para PARTITION BY RANGE COLUMNS(...).

Definição RANGE original com chave de partição vetorial:

CREATE TABLE tb_r(
  id bigint NOT NULL AUTO_INCREMENT,
  bid int,
  name varchar(30),
  birthday datetime NOT NULL,
  PRIMARY KEY(id)
)
PARTITION BY RANGE(bid, id)
(
  PARTITION p1 VALUES LESS THAN(1, 1000),
  PARTITION p2 VALUES LESS THAN(2, 2000),
  PARTITION pm VALUES LESS THAN(MAXVALUE, MAXVALUE)
);

Definição RANGE COLUMNS equivalente após conversão automática:

CREATE TABLE tb_r(
  id bigint NOT NULL AUTO_INCREMENT,
  bid int,
  name varchar(30),
  birthday datetime NOT NULL,
  PRIMARY KEY(id)
)
PARTITION BY RANGE COLUMNS(bid, id)
(
  PARTITION p1 VALUES LESS THAN(1, 1000),
  PARTITION p2 VALUES LESS THAN(2, 2000),
  PARTITION pm VALUES LESS THAN(MAXVALUE, MAXVALUE)
);

Tipos de dados compatíveis

Os seguintes tipos de dados de coluna funcionam como chaves de partição RANGE:

Categoria

Tipos compatíveis

Inteiro

BIGINT, BIGINT UNSIGNED, INT, INT UNSIGNED, MEDIUMINT, MEDIUMINT UNSIGNED, SMALLINT, SMALLINT UNSIGNED, TINYINT, TINYINT UNSIGNED

Data e hora

DATETIME, DATE, TIMESTAMP

String

CHAR, VARCHAR

Próximos passos