Todos los productos
Search
Centro de documentos

PolarDB:Convertir una tabla no particionada en una tabla particionada por rango

Última actualización: Sep 05, 2026

PolarDB for MySQL PolarDB permite convertir rápidamente una tabla no particionada en una tabla particionada por rango sin redistribuir los datos. En este tema se describe cómo usar PolarDB para efectuar esta conversión.

Contexto

PolarDB Al convertir una tabla no particionada en una tabla particionada por rango, los datos de la tabla original se colocan en la primera partición sin validación y las demás particiones quedan vacías.PolarDB Este método se utiliza normalmente para archivar datos históricos en la primera partición. De esta forma, se evita la reescritura de datos que exige la sintaxis estándar ALTER PARTITION BY, lo cual agiliza la conversión.

Ámbito de aplicación

  • MySQL 8.0.2: la versión de revisión debe ser 8.0.2.2.19 o posterior.

  • MySQL 8.0.1: la versión de revisión debe ser 8.0.1.1.34 o posterior.

  • Si la tabla tiene columnas INSTANT o índices de almacenamiento en columnas (IMCI), la versión del clúster debe ser MySQL 8.0.2 y la versión de revisión debe ser 8.0.2.2.36 o posterior.

Consulte Query the engine version la consulta de la versión del motor para comprobar la versión del clúster.

Límites

Si una tabla contiene columnas agregadas mediante la instrucción INSTANT ADD COLUMN, no es posible convertirla en una tabla particionada por rango.

Instrucciones

Sintaxis y ejemplos

  • Sintaxis

    En la instrucción ALTER TABLE, agregue la palabra clave WITHOUT VALIDATION.

    ALTER TABLE table_name
    PARTITION BY RANGE {(expr) | COLUMNS(column_list)}
    (partition_definition [, partition_definition] ...)
    WITHOUT VALIDATION;

    donde partition_definition:

    PARTITION partition_name
           VALUES LESS THAN {(value | value_list) | MAXVALUE}
  • Parámetros

    Parámetro

    Descripción

    table_name

    Nombre de la tabla.

    column_list

    Tipo LIST COLUMNS. Lista de claves de partición. No admite expresiones.

    RANGE(expr)

    Expresión utilizada para el particionamiento por rango.

    partition_name

    Nombre de la partición.

    value_list

    Valores límite de la partición.

    MAXVALUE

    Valor máximo.

  • Ejemplo

    Convierta la tabla no particionada t1 en una tabla particionada por rango.

    CREATE TABLE t1 (
    `a` int ,
    `b` int ,
    Primary Key(a, b));
    
    insert into t1 values(1,1),(2,1),(3,1),(4,1),(111,111),(3333,333);
    
    alter table t1 partition by range(a) (
      partition p0 values less than (100),
      partition p1 values less than (200)
    ) WITHOUT VALIDATION;

    t1, todos los datos se mueven apartition p0 sin validación. Si confirma que todos los datos de la tabla no particionada se encuentran dentro delp0 límite declarado, puede usar esta sintaxis para convertir rápidamente la tabla no particionada en una tabla particionada por rango.

    Nota
    • Asegúrese de que todos los datos de la tabla no particionada se encuentren dentro del límite de la primera partición. De lo contrario, después de la conversión, es posible que no se puedan recuperar los datos que no cumplan con las reglas de particionamiento.

    • Cuando se usa la opción WITHOUT VALIDATION, todos los datos de la tabla no particionada se mueven a la primera partición sin validación. Asegúrese de que el límite de partición especificado en la instrucción DDL coincida con todos los datos de la tabla no particionada.

Sintaxis combinada

La palabra clave WITHOUT VALIDATION se puede usar con tablas particionadas por INTERVAL, las cuales crean automáticamente particiones RANGE con el mismo intervalo. Por ejemplo:

CREATE TABLE t1(
 ID int,
 DATE DATE,
 PRIMARY KEY (ID,DATE)
);
ALTER TABLE t1 
partition by RANGE COLUMNS(date) INTERVAL(DAY, 1) (
  PARTITION p0 VALUES LESS THAN ('2023-01-31')
) without validation;

Comparación de rendimiento

PolarDB En comparación con el método nativo de MySQL, la conversión de una tabla no particionada a una tabla particionada por rango en PolarDB for MySQL solo actualiza los metadatos de la tabla y no reescribe los datos. Este proceso se completa en menos de 0.1 segundos. El método nativo de MySQL requiere validar y reescribir los datos, por lo que tarda más conforme aumenta el volumen de información.

Tamaño de la tabla

Método estándar ALTER TABLE PARTITION BY de MySQL

PolarDBSintaxis y ejemplos

1 GB (6001215 filas)

52.24 segundos

0.10 segundos

10 GB (59986052 filas)

8 minutos y 45.82 segundos

0.07 segundos