Reconstruisez un index columnar en cluster (CCI) pour modifier sa définition (clé de tri, clé de partitionnement ou nombre de partitions) sans interrompre les requêtes en cours ni les opérations d'écriture.
Prérequis
Avant de commencer, vérifiez que :
Un CCI existe déjà sur la table cible.
Votre instance exécute la version 5.4.20-20250714 ou ultérieure.
Pour les règles de nommage des versions, consultez Notes de version . Pour vérifier la version de votre instance, reportez-vous à Afficher et mettre à jour la version d'une instance .
Quand reconstruire un CCI
Reconstruisez un CCI dans les cas suivants :
La clé de tri ou de partitionnement actuelle ne correspond plus à vos modèles d'accès aux requêtes, ce qui dégrade les performances.
Des colonnes utilisées dans l'index ont été ajoutées, supprimées ou modifiées, et les requêtes associées ont changé.
Le volume de données a atteint un seuil où la stratégie de partitionnement initiale provoque une distribution inégale, ou un nombre excessif ou insuffisant de partitions.
Une colonne temporelle permettrait une meilleure répartition des données entre les partitions pour de grands jeux de données chronologiques.
Une mise à niveau de la base de données introduit de nouvelles fonctionnalités CCI nécessitant une reconstruction pour être activées.
Fonctionnement
La reconstruction crée un nouveau CCI avec la définition mise à jour, puis supprime le CCI d'origine. Comme les deux CCI coexistent temporairement pendant ce processus, augmentez la limite MAX_CCI_COUNT avant de commencer.
Cette opération s'exécute en ligne et n'acquiert pas de verrous. Les requêtes existantes sur le CCI et sur la table row-based sous-jacente continuent donc de s'exécuter sans interruption.
Reconstruire un CCI
-
Définissez la variable
MAX_CCI_COUNT.Réglez MAX_CCI_COUNT sur au moins 2 afin de permettre la coexistence temporaire de l'ancien et du nouveau CCI.
SET GLOBAL MAX_CCI_COUNT = 2;RemarqueSi la table possède déjà plusieurs CCI, attribuez à MAX_CCI_COUNT une valeur supérieure au nombre total actuel de CCI sur cette table.
-
Reconstruisez l'index.
Choisissez une opération synchrone ou asynchrone pour reconstruire l'index.
Mode Comportement Cas d'usage Synchrone Bloque la session en cours jusqu'à la fin de la reconstruction Tables petites ou moyennes dont la reconstruction est rapide Asynchrone (recommandé) Retourne immédiatement ; la reconstruction s'exécute en arrière-plan Grandes tables pour lesquelles une longue reconstruction bloquerait la session Reconstruction synchrone
ALTER TABLE tbl_name REBUILD CLUSTERED COLUMNAR INDEX index_name [CCI DEFINITION];Pour la syntaxe complète de la définition CCI, consultez Créer et utiliser un CCI.
RemarqueLes paramètres
tbl_nameetindex_namespécifiés doivent exister, faute de quoi une erreur est renvoyée.Les CCI archivés ne peuvent pas être reconstruits.
Reconstruction asynchrone (recommandée pour les grandes tables)
ALTER TABLE tbl_name REBUILD CLUSTERED COLUMNAR INDEX index_name [CCI DEFINITION] ASYNC=TRUE;
Exemple
Cet exemple remplace la clé de tri id par seller_id et porte le nombre de partitions de 4 à 16.
1. Créez une table avec un CCI initial.
La clé de tri et la clé de partitionnement sont toutes deux définies sur id, avec 4 partitions CCI.
CREATE TABLE `t_order` (
`id` bigint(11) NOT NULL AUTO_INCREMENT,
`order_id` varchar(20) DEFAULT NULL,
`buyer_id` varchar(20) DEFAULT NULL,
`seller_id` varchar(20) DEFAULT NULL,
`order_snapshot` longtext,
CLUSTERED COLUMNAR INDEX `cci_test` (`id`) PARTITION BY KEY(`id`) PARTITIONS 4,
PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8 AUTO_INCREMENT = 2
PARTITION BY KEY(`id`)
PARTITIONS 16;
2. Augmentez la limite de CCI.
SET GLOBAL MAX_CCI_COUNT = 2;
3. Reconstruisez le CCI avec la nouvelle définition.
La clé de tri devient seller_id et le nombre de partitions passe à 16.
ALTER TABLE `t_order`
REBUILD CLUSTERED COLUMNAR INDEX `cci_test`(`seller_id`) PARTITION BY KEY(`id`) PARTITIONS 16;
4. Vérifiez le schéma mis à jour.
SHOW CREATE TABLE t_order\G
La sortie confirme que la définition du CCI a bien été mise à jour :
*************************** 1. row ***************************
Table: t_order
Create Table: CREATE TABLE `t_order` (
`id` bigint(11) NOT NULL AUTO_INCREMENT,
`order_id` varchar(20) DEFAULT NULL,
`buyer_id` varchar(20) DEFAULT NULL,
`seller_id` varchar(20) DEFAULT NULL,
`order_snapshot` longtext,
PRIMARY KEY (`id`),
CLUSTERED COLUMNAR INDEX `cci_test` (`seller_id`)
PARTITION BY KEY(`id`)
PARTITIONS 16
) ENGINE = InnoDB DEFAULT CHARSET = utf8
PARTITION BY KEY(`id`)
PARTITIONS 16
Étapes suivantes
Créer et utiliser un CCI — Syntaxe et options de définition des CCI
Notes de version — Historique des versions et nouvelles fonctionnalités CCI