Tous les produits
Search
Centre de documentation

PolarDB:Convertir une table non partitionnée en table partitionnée par plage

Dernière mise à jour :Aug 11, 2026

PolarDB for MySQL PolarDB permet de convertir rapidement une table non partitionnée en table partitionnée par plage sans redistribution des données. Cette rubrique explique comment utiliser PolarDB pour réaliser cette conversion.

Informations générales

Lorsque vous convertissez une table non partitionnée en table partitionnée par plage avec PolarDB, les données de la table non partitionnée sont placées dans la première partition sans validation, tandis que les autres partitions restent vides. Avec PolarDB, cette méthode sert généralement à archiver les données historiques dans la première partition et à éviter la réécriture des données imposée par la syntaxe standard ALTER PARTITION BY, ce qui accélère la conversion.

Champ d'application

  • MySQL 8.0.2 : la version de révision doit être 8.0.2.2.19 ou ultérieure.

  • MySQL 8.0.1 : la version de révision doit être 8.0.1.1.34 ou ultérieure.

  • Si la table contient des colonnes INSTANT ou des index column store (IMCI), la version du cluster doit être MySQL 8.0.2 et la version de révision doit être 8.0.2.2.36 ou ultérieure.

Vous pouvez interroger la version du moteur pour vérifier la version du cluster.

Limites

Si une table comporte des colonnes ajoutées via l'instruction INSTANT ADD COLUMN, elle ne peut pas être convertie en table partitionnée par plage.

Instructions

Syntaxe et exemples

  • Syntaxe

    Dans l'instruction ALTER TABLE, ajoutez le mot-cléWITHOUT VALIDATION.

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

    partition_definition :

    PARTITION partition_name
           VALUES LESS THAN {(value | value_list) | MAXVALUE}
  • Paramètres

    Paramètre

    Description

    table_name

    Nom de la table.

    column_list

    Type LIST COLUMNS. Liste des clés de partitionnement. Les expressions ne sont pas prises en charge.

    RANGE(expr)

    Expression utilisée pour le partitionnement par plage (RANGE).

    partition_name

    Nom de la partition.

    value_list

    Valeurs limites de la partition.

    MAXVALUE

    Valeur maximale.

  • Exemple

    Convertissez la table non partitionnée t1 en table partitionnée par plage.

    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;

    Avec t1, toutes les données sont déplacées vers la partition p0 sans validation. Si vous confirmez que toutes les données de la table non partitionnée se situent dans les limites déclarées de p0, utilisez cette syntaxe pour convertir rapidement la table non partitionnée en table partitionnée par plage.

    Remarque
    • Assurez-vous que toutes les données de la table non partitionnée se situent dans les limites de la première partition. Sinon, après la conversion, les données qui ne respectent pas les règles de partitionnement risquent de ne pas être récupérables.

    • Lorsque l'option WITHOUT VALIDATION est utilisée, toutes les données de la table non partitionnée sont déplacées vers la première partition sans validation. Vérifiez que la limite de partition spécifiée dans l'instruction DDL correspond à toutes les données de la table non partitionnée.

Syntaxe combinée

Le mot-cléWITHOUT VALIDATION peut être utilisé avec les tables partitionnées par INTERVAL, qui créent automatiquement des partitions RANGE à intervalles réguliers. Exemple :

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;

Comparaison des performances

Par rapport à la méthode native de MySQL, la conversion d'une table non partitionnée en table partitionnée par plage dans PolarDB for MySQL avec PolarDB met uniquement à jour les métadonnées de la table et ne réécrit pas les données. La conversion s'effectue en moins de 0,1 seconde. La méthode native de MySQL doit valider et réécrire les données, ce qui prend plus de temps à mesure que le volume de données augmente.

Taille de la table

MySQL standard ALTER TABLE PARTITION BY

Syntaxe et exemples avec PolarDB

1 Go (6 001 215 lignes)

52,24 secondes

0,10 seconde

10 Go (59 986 052 lignes)

8 minutes 45,82 secondes

0,07 seconde