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
INSTANTou 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;où
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
t1en 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.
RemarqueAssurez-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 |