Todos los productos
Search
Centro de documentos

PolarDB:LIST DEFAULT HASH

Última actualización: Sep 05, 2026

Este tema describe cómo crear y modificar una tabla particionada con LIST DEFAULT HASH.

Contexto

PolarDB admite una estrategia de particionamiento híbrido que combina el particionamiento LIST y HASH en el mismo nivel. En este modelo, los datos se evalúan primero contra un conjunto de particiones LIST. Los datos que no coinciden con ningún valor definido de LIST se colocan en una partición predeterminada. Si esta partición predeterminada se subdivide, una función HASH distribuye los datos entre las subdivisiones. Este enfoque es ideal para casos de uso donde los valores de LIST tienen una distribución desigual o cuando resulta poco práctico enumerar todos los valores posibles.LIST DEFAULT HASH

Límites

  • Su clúster debe cumplir con uno de los siguientes requisitos de versión. Para comprobar la versión de su clúster, consulte View the version of a cluster.

    • PolarDB for MySQL 8.0.1 con la versión de revisión 8.0.1.1.34 o posterior.

    • PolarDB for MySQL 8.0.2 con la versión de revisión 8.0.2.2.1 o posterior.

  • Se admiten una o más particiones predeterminadas en el nivel de partición.

  • Es posible usar una combinación de LIST y DEFAULT para las subparticiones, pero cada partición solo admite una subpartición predeterminada.

  • Si una partición tiene solo una partición predeterminada, se admiten todos los tipos de subparticiones.

  • Si una partición tiene varias particiones predeterminadas, solo se admiten subparticiones HASH o KEY.

Creación de una tabla particionada con LIST DEFAULT HASH

Sintaxis

PolarDB le permite crear tablas particionadas que almacenan en una partición predeterminada los datos que no coinciden con una partición LIST especificada. Si esta partición crece demasiado, puede usar el método HASH para dividirla en varias particiones.

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

La definición default_partition_definition es la siguiente:

PARTITION partition_name DEFAULT [PARTITIONS number]

Cada definición de partición también puede incluir subparticiones. LIST DEFAULT también es compatible con las subparticiones y se define de la siguiente manera:

SUBPARTITION subpartition_name DEFAULT

Parameter Description

Parámetro

Descripción

table_name

El nombre de la tabla que se va a crear.

partition_name

  • Si solo existe una partición predeterminada, este parámetro especifica el nombre de la partición. El nombre debe ser único dentro de la tabla.

  • Si existen varias particiones predeterminadas, este parámetro especifica el prefijo del nombre de las particiones. El nombre final de la partición se forma al agregar un número de secuencia a este prefijo.

subpartition_name

El nombre de la subpartición. Debe ser único dentro de la tabla. Cada partición puede tener como máximo una subpartición predeterminada.

number

Especifica el número de particiones que se crearán a partir de la partición predeterminada mediante un método HASH. La cláusula PARTITIONS number es opcional. Si se omite, se crea una única partición predeterminada.

Example

A continuación se muestra cómo crear una sola partición predeterminada:

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);

En el siguiente ejemplo se muestra cómo crear varias particiones predeterminadas:

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);

El siguiente ejemplo muestra cómo usar LIST COLUMNS cuando la clave de particionamiento tiene el tipo de dato 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 el comando EXPLAIN para consultar las particiones:

EXPLAIN SELECT * FROM list_default_hash;

El resultado es el siguiente:

+----+-------------+-------------------+-------------------+------+---------------+------+---------+------+------+----------+-------+
| 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)

El siguiente ejemplo muestra cómo usar LIST DEFAULT para las subparticiones:

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));

Si una partición tiene varias particiones predeterminadas, solo se admiten subparticiones HASH o KEY:

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);

Modificación de una tabla particionada con LIST DEFAULT HASH

Las particiones LIST DEFAULT HASH admiten operaciones 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 y ALTER TABLE CHECK PARTITION.

Este tema describe cómo usar ALTER TABLE ADD PARTITION, ALTER TABLE DROP PARTITION y ALTER TABLE REORGANIZE PARTITION. Para obtener información sobre otras operaciones para modificar tablas particionadas con LIST DEFAULT HASH, consulte Modify a partitioned table.

ALTER TABLE ADD PARTITION

  • ADD DEFAULT PARTITION

    Sintaxis

    Para una tabla particionada con LIST estándar sin partición predeterminada, puede usar el comando ADD PARTITION para agregar una partición predeterminada. Esto convierte la tabla en una tabla particionada con LIST DEFAULT HASH.

    ALTER TABLE table_name ADD PARTITION(default_partition_definition)

    Example

    A continuación se muestra cómo agregar una sola partición predeterminada:

    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);

    En el siguiente ejemplo se muestra cómo agregar dos particiones predeterminadas:

    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

    En PolarDB for MySQL 8.0.2.2.11 y versiones posteriores, puede usar la opción WITHOUT VALIDATION con el comando ALTER TABLE ADD PARTITION para agregar una partición LIST a una tabla particionada con LIST DEFAULT HASH.

    Asegúrese de que los valores de la nueva partición LIST no existan ya en la partición predeterminada. Si ya existen, use el comando ALTER TABLE REORGANIZE PARTITION para mover los datos de la partición predeterminada a una nueva partición LIST.

    Sintaxis

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

    Example

    Agregue una nueva partición 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;

    Después de la ejecución, se agrega una partición LIST p2 a la tabla list_default_hash, y p2 no contiene datos.

    Nota

    Asegúrese de que la partición predeterminada no contenga los valores 11, 12 y 13 para la columna a. De lo contrario, después de agregar la nueva partición LIST, estas filas podrían volverse inaccesibles.

ALTER TABLE DROP PARTITION

Para obtener más información sobre la sintaxis de DROP PARTITION, consulte DROP PARTITION.

Example

Cuando utilice la operación DROP PARTITION, debe eliminar todas las particiones predeterminadas a la vez. No es posible eliminar solo un subconjunto de ellas.

Ejecute el comando DROP PARTITION para eliminar todas las particiones.

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

Mensaje de error

Se produce un error si intenta eliminar solo algunas de las particiones predeterminadas.

ALTER TABLE list_default_hash DROP PARTITION pd0;

El comando devuelve el siguiente mensaje de error:

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 obtener más información sobre la sintaxis de REORGANIZE PARTITION, consulte REORGANIZE PARTITION.

Example

Cuando utilice la operación REORGANIZE PARTITION, debe modificar todas las particiones predeterminadas a la vez. No es posible modificar solo un subconjunto de ellas.

  • Use REORGANIZE PARTITION para cambiar el número de particiones predeterminadas:

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

    Después de ejecutar este comando, el número de particiones predeterminadas cambia de dos a tres.

  • Use REORGANIZE PARTITION para separar una nueva partición LIST de las particiones predeterminadas:

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

    Este comando agrega una nueva partición LIST llamada p2 a la tabla y mueve las filas que coinciden con VALUES IN (20,21) desde las particiones predeterminadas hacia p2.

  • Use REORGANIZE PARTITION para fusionar una partición LIST con las particiones predeterminadas:

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

    Este comando fusiona la partición LIST p2 con las particiones predeterminadas.

  • Use REORGANIZE PARTITION para expandir una partición LIST al mover valores desde las particiones predeterminadas:

    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);

    Este comando cambia la definición de p2 de PARTITION p2 VALUES IN (20,21) a PARTITION p2 VALUES IN (20,21,22,23,24). También mueve los datos correspondientes de las particiones predeterminadas a p2.

Temas relacionados

When to choose LIST DEFAULT HASH partitioning