Todos os produtos
Search
Central de documentação

PolarDB:LIST DEFAULT HASH

Última atualização: Jun 28, 2026

Este tópico descreve como crie e modifique uma tabela particionada LIST DEFAULT HASH.

Informações básicas

PolarDB oferece suporte a uma estratégia de particionamento híbrida que combina os particionamentos LIST e HASH no mesmo nível. Nesse modelo, o sistema avalia primeiro os dados em relação a um conjunto de partições LIST. Dados que não correspondam a um valor LIST definido vão para uma partição padrão. Se essa partição padrão for subdividida, uma função HASH distribui os dados entre as subdivisões. Essa abordagem é ideal para casos de uso em que os valores LIST têm distribuição desigual ou quando enumerar todos os valores possíveis é impraticável.LIST DEFAULT HASH

Limitações

  • O cluster deve atender a um dos seguintes requisitos de versão. Para verificar a versão do cluster, consulte Visualizar a versão de um cluster.

    • PolarDB for MySQL 8.0.1 com versão de revisão 8.0.1.1.34 ou posterior.

    • PolarDB for MySQL 8.0.2 com versão de revisão 8.0.2.2.1 ou posterior.

  • O nível de partição aceita uma ou mais partições padrão.

  • É possível usar uma combinação de LIST e DEFAULT para subpartições, mas cada partição aceita apenas uma subpartição padrão.

  • Se uma partição tiver apenas uma partição padrão, todos os tipos de subpartições serão aceitos.

  • Se uma partição tiver múltiplas partições padrão, apenas subpartições HASH ou KEY serão aceitas.

Crie uma tabela particionada LIST DEFAULT HASH

Sintaxe

O PolarDB permite criar tabelas particionadas que armazenam, em uma partição padrão, dados sem correspondência com uma partição LIST especificada. Se essa partição crescer excessivamente, use o método HASH para dividi-la em várias partições.

CREATE TABLE [ schema. ]table_name
 table_definition
   PARTITION BY LIST [COLUMNS] (expr)
   SUBPARTITION BY ...
   (list_partition_definition[, ..., list_partition_definition],
    default_partition_definition
   )

A definição de default_partition_definition é a seguinte:

PARTITION partition_name DEFAULT [PARTITIONS number]

Cada definição de partição também pode incluir subpartições. O LIST DEFAULT também tem suporte para subpartições e segue esta definição:

SUBPARTITION subpartition_name DEFAULT

Descrição dos parâmetros

Parâmetro

Descrição

table_name

Nome da tabela a ser criada.

partition_name

  • Se houver apenas uma partição padrão, este parâmetro especifica o nome da partição. O nome deve ser único na tabela.

  • Quando existem múltiplas partições padrão, este parâmetro defina o prefixo do nome das partições. O nome final da partição resulta da adição de um número sequencial a esse prefixo.

subpartition_name

Nome da subpartição. Deve ser único na tabela. Cada partição pode ter no máximo uma subpartição padrão.

number

Especifica o número de partições a serem criadas a partir da partição padrão usando o método HASH. A cláusula PARTITIONS number é opcional. Se omitida, o sistema cria uma única partição padrão.

Exemplo

O exemplo abaixo demonstra como criar uma única partição padrão:

CREATE TABLE list_default (
  a INT,
  b INT
)
PARTITION BY LIST (a)
(PARTITION p0 VALUES IN (1,2,3,4,5),
 PARTITION p1 VALUES IN (6,7,8,9,10),
 PARTITION pd DEFAULT);

Veja a seguir como criar múltiplas partições padrão:

CREATE TABLE list_default_hash (
  a INT,
  b INT
)
PARTITION BY LIST (a)
(PARTITION p0 VALUES IN (1,2,3,4,5),
 PARTITION p1 VALUES IN (6,7,8,9,10),
 PARTITION pd DEFAULT PARTITIONS 3);

Este exemplo ilustra o uso de LIST COLUMNS quando a chave de partição possui o tipo de dados VARCHAR:

CREATE TABLE t_goods
(
  country   VARCHAR(30),
  year      VARCHAR(60),
  goods     TEXT
) PARTITION BY LIST COLUMNS(country)
(
  PARTITION p1 VALUES IN ('China'),
  PARTITION p2 VALUES IN ('USA'),
  PARTITION p3 VALUES IN ('Asia'),
  PARTITION p4 VALUES IN ('Singapore'),
  PARTITION p_deft DEFAULT PARTITIONS 5
);

Use a instrução EXPLAIN para visualize as partições:

EXPLAIN SELECT * FROM list_default_hash;

A saída será semelhante a esta:

+----+-------------+-------------------+-------------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table             | partitions        | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra |
+----+-------------+-------------------+-------------------+------+---------------+------+---------+------+------+----------+-------+
|  1 | SIMPLE      | list_default_hash | p0,p1,pd0,pd1,pd2 | ALL  | NULL          | NULL | NULL    | NULL |    1 |   100.00 | NULL  |
+----+-------------+-------------------+-------------------+------+---------------+------+---------+------+------+----------+-------+
1 row in set (0.04 sec)

O exemplo a seguir mostra como aplicar LIST DEFAULT em subpartições:

CREATE TABLE test (a int, b int)
PARTITION BY RANGE(a)
SUBPARTITION BY LIST(b) (
PARTITION part0 VALUES LESS THAN (10)
( SUBPARTITION sub0 VALUES IN (1,2,3,4,5),
  SUBPARTITION sub1 DEFAULT),
PARTITION part1 VALUES LESS THAN (20)
( SUBPARTITION sub2 VALUES IN (1,2,3,4,5),
  SUBPARTITION sub3 DEFAULT),
PARTITION part2 VALUES LESS THAN (30)
( SUBPARTITION sub4 VALUES IN (1,2,3,4,5),
  SUBPARTITION sub5 DEFAULT));

Se uma partição tiver múltiplas partições padrão, apenas subpartições HASH ou KEY serão aceitas:

CREATE TABLE list_default_hash_sub (
  a INT,
  b INT
)
PARTITION BY LIST (a)
SUBPARTITION BY HASH (b) SUBPARTITIONS 20
(PARTITION p0 VALUES IN (1,2,3,4,5),
 PARTITION p1 VALUES IN (6,7,8,9,10),
 PARTITION pd DEFAULT PARTITIONS 3);

Modifique uma tabela particionada LIST DEFAULT HASH

As partições LIST DEFAULT HASH aceitam operações como ALTER TABLE ADD PARTITION, ALTER TABLE DROP PARTITION, ALTER TABLE REORGANIZE PARTITION, ALTER TABLE TRUNCATE PARTITION, ALTER TABLE EXCHANGE PARTITION, ALTER TABLE OPTIMIZE PARTITION, ALTER TABLE REBUILD PARTITION, ALTER TABLE REPAIR PARTITION, ALTER TABLE ANALYZE PARTITION e ALTER TABLE CHECK PARTITION.

Este tópico aborda o uso de ALTER TABLE ADD PARTITION, ALTER TABLE DROP PARTITION e ALTER TABLE REORGANIZE PARTITION. Para detalhes sobre outras operações de modificação de tabelas particionadas LIST DEFAULT HASH, consulte Modifique uma tabela particionada.

ALTER TABLE ADD PARTITION

  • ADD DEFAULT PARTITION

    Sintaxe

    Para uma tabela particionada LIST padrão sem partição padrão, use a instrução ADD PARTITION para adicionar uma partição padrão. Isso converte a tabela em uma tabela particionada LIST DEFAULT HASH.

    ALTER TABLE table_name ADD PARTITION(default_partition_definition)

    Exemplo

    O exemplo a seguir mostra como adicionar uma única partição padrão:

    CREATE TABLE list_tab (
      a INT,
      b INT
    )
    PARTITION BY LIST (a)
    (PARTITION p0 VALUES IN (1,2,3,4,5),
     PARTITION p1 VALUES IN (6,7,8,9,10)
    );
    ALTER TABLE list_tab ADD PARTITION(PARTITION pd DEFAULT);

    Já o exemplo abaixo ilustra a adição de duas partições padrão:

    CREATE TABLE list_tab (
      a INT,
      b INT
    )
    PARTITION BY LIST (a)
    (PARTITION p0 VALUES IN (1,2,3,4,5),
     PARTITION p1 VALUES IN (6,7,8,9,10)
    );
    ALTER TABLE list_tab ADD PARTITION(PARTITION pd DEFAULT PARTITIONS 2);
  • ADD LIST PARTITION

    No PolarDB for MySQL 8.0.2.2.11 e versões posteriores, é possível usar a opção WITHOUT VALIDATION com a instrução ALTER TABLE ADD PARTITION para adicionar uma partição LIST a uma tabela particionada LIST DEFAULT HASH.

    Certifique-se de que os valores da nova partição LIST não existam previamente na partição padrão. Caso existam, use a instrução ALTER TABLE REORGANIZE PARTITION para mover os dados da partição padrão para a nova partição LIST.

    Sintaxe

    ALTER TABLE table_name ADD PARTITION(
      list_partition_definition[, ..., list_partition_definition])
    WITHOUT VALIDATION

    Exemplo

    Adicione uma nova partição LIST.

    CREATE TABLE list_default_hash (
      a INT,
      b INT
    )
    PARTITION BY LIST (a)
    (PARTITION p0 VALUES IN (1,2,3,4,5),
     PARTITION p1 VALUES IN (6,7,8,9,10),
     PARTITION pd DEFAULT PARTITIONS 3);
    
    ALTER TABLE list_default_hash ADD PARTITION(
      PARTITION p2 VALUES IN (11,12,13)
    )WITHOUT VALIDATION;

    Após a execução, uma partição LIST p2 é adicionada à tabela list_default_hash, e p2 não contém dados.

    Nota

    Garanta que a partição padrão não contenha os valores 11, 12 e 13 para a coluna a. Caso contrário, após a adição da nova partição LIST, essas linhas podem tornar-se inacessíveis.

ALTER TABLE DROP PARTITION

Para mais informações sobre a sintaxe de DROP PARTITION, consulte DROP PARTITION.

Exemplo

Ao usar a operação DROP PARTITION, remova todas as partições padrão simultaneamente. Não é possível remover apenas um subconjunto das partições padrão.

Execute o comando DROP PARTITION para remover todas as partições.

ALTER TABLE list_default_hash DROP PARTITION pd0,pd1,pd2;
Query OK, 0 rows affected (0.33 sec)
Records: 0  Duplicates: 0  Warnings: 0

Mensagem de erro

Um erro ocorre se você tentar remover apenas algumas das partições padrão.

ALTER TABLE list_default_hash DROP PARTITION pd0;

O comando retorna a seguinte mensagem de erro:

ERROR 8078 (HY000): DROP PARTITION cannot be used on default partitions of LIST DEFAULT, except once dropping all default partitions

ALTER TABLE REORGANIZE PARTITION

Para obter mais detalhes sobre a sintaxe de REORGANIZE PARTITION, consulte REORGANIZE PARTITION.

Exemplo

Ao executar a operação REORGANIZE PARTITION, modifique todas as partições padrão de uma só vez. A modificação de apenas um subconjunto de partições padrão não é permitida.

  • Use REORGANIZE PARTITION para alterar o número de partições padrão:

    ALTER TABLE list_default_hash
    REORGANIZE PARTITION
      pd0,pd1
    INTO(
      PARTITION pd DEFAULT PARTITIONS 3);

    Após executar esta instrução, o número de partições padrão muda de dois para três.

  • Use REORGANIZE PARTITION para extrair uma nova partição LIST das partições padrão:

    ALTER TABLE list_default_hash
    REORGANIZE PARTITION
      pd0,pd1
    INTO (
     PARTITION p2 VALUES IN (20,21),
     PARTITION pd DEFAULT PARTITIONS 2);

    Esta instrução adiciona uma nova partição LIST chamada p2 à tabela e move as linhas correspondentes a VALUES IN (20,21) das partições padrão para p2.

  • Use REORGANIZE PARTITION para mesclar uma partição LIST nas partições padrão:

    ALTER TABLE list_default_hash
    REORGANIZE PARTITION
      p2, pd0, pd1
    INTO (
     PARTITION pd DEFAULT PARTITIONS 2);

    Esta instrução mescla a partição LIST p2 nas partições padrão.

  • Use REORGANIZE PARTITION para expandir uma partição LIST movendo valores das partições padrão:

    ALTER TABLE list_default_hash
    REORGANIZE partition
      p2, pd0, pd1
    INTO (
      PARTITION p2 VALUES IN (20,21,22,23,24),
      PARTITION pd DEFAULT PARTITIONS 4);

    Esta instrução altera a definição de p2 de PARTITION p2 VALUES IN (20,21) para PARTITION p2 VALUES IN (20,21,22,23,24). Ela também move os dados correspondentes das partições padrão para p2.

Tópicos relacionados

Quando escolha o particionamento LIST DEFAULT HASH