Reconstruya un índice columnar agrupado (CCI) para modificar su definición, como la clave de ordenamiento, la clave de partición o el número de particiones. Este proceso no interrumpe las consultas en ejecución ni las operaciones de escritura.
Requisitos previos
Antes de empezar, compruebe lo a continuación:
Ya existe un CCI en la tabla de destino.
Su instancia ejecuta la versión 5.4.20-20250714 o posterior.
Para conocer las reglas de nomenclatura de versiones, consulte Notas de la versión . Para comprobar la versión de su instancia, consulte Consulta y actualización de la versión de una instancia .
Cuándo reconstruir un CCI
Reconstruya un CCI cuando se presente alguna de estas situaciones:
La clave de ordenamiento o de partición actual ya no coincide con los patrones de acceso de sus consultas y el rendimiento es inferior al esperado.
Se agregaron, eliminaron o modificaron columnas del índice y las consultas asociadas cambiaron.
El volumen de datos creció tanto que la estrategia de particionamiento original genera una distribución desigual o produce demasiadas o muy pocas particiones.
Una columna basada en tiempo distribuye mejor los datos entre las particiones en conjuntos de datos grandes de series temporales.
Una actualización de la base de datos introduce nuevas capacidades de CCI que requieren una reconstrucción para activarse.
Cómo funciona
La reconstrucción crea un nuevo CCI con la definición actualizada y después elimina el CCI original. Como ambos índices coexisten temporalmente durante este proceso, debe aumentar el límite MAX_CCI_COUNT antes de empezar.
Este proceso se ejecuta en línea y no adquiere bloqueos. Por lo tanto, las consultas existentes sobre el CCI y la tabla subyacente basada en filas continúan ejecutándose sin interrupciones.
Reconstrucción de un CCI
-
Establezca la variable
MAX_CCI_COUNTEstablezca MAX_CCI_COUNT como mínimo en 2 para permitir que el CCI antiguo y el nuevo coexistan temporalmente.
SET GLOBAL MAX_CCI_COUNT = 2;NotaSi la tabla ya tiene varios CCI, establezca MAX_CCI_COUNT en un valor mayor que la cantidad total actual de CCI en esa tabla.
-
Reconstruya el índice
Puede reconstruir un índice mediante una operación síncrona o asíncrona.
Modo
Comportamiento
Cuándo usarlo
Síncrono
Bloquea la sesión actual hasta que finaliza la reconstrucción
Tablas pequeñas o medianas donde el tiempo de reconstrucción es breve
Asíncrono (recomendado)
Devuelve el control de inmediato; la reconstrucción se ejecuta en segundo plano
Tablas grandes donde una reconstrucción prolongada bloquearía la sesión
Reconstrucción síncrona
ALTER TABLE tbl_name REBUILD CLUSTERED COLUMNAR INDEX index_name [CCI DEFINITION];Para consultar la sintaxis completa de la definición de CCI, consulte Create and use a CCI.
NotaLos valores
tbl_nameeindex_nameespecificados deben existir; de lo contrario, se devuelve un error.No se pueden reconstruir los CCI archivados.
Reconstrucción asíncrona (recomendada para tablas grandes)
ALTER TABLE tbl_name REBUILD CLUSTERED COLUMNAR INDEX index_name [CCI DEFINITION] ASYNC=TRUE;
Ejemplo
En este ejemplo se cambia la clave de ordenamiento de id a seller_id y se aumenta el número de particiones de 4 a 16.
1. Cree una tabla con un CCI inicial.
Tanto la clave de ordenamiento como la de partición se establecen en id, con 4 particiones de 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. Aumente el límite de CCI.
SET GLOBAL MAX_CCI_COUNT = 2;
3. Reconstruya el CCI con la nueva definición.
La clave de ordenamiento cambia a seller_id y el número de particiones pasa a 16.
ALTER TABLE `t_order`
REBUILD CLUSTERED COLUMNAR INDEX `cci_test`(`seller_id`) PARTITION BY KEY(`id`) PARTITIONS 16;
4. Compruebe el esquema actualizado.
SHOW CREATE TABLE t_order\G
El resultado confirma que la definición del CCI se actualizó correctamente:
*************************** 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
Pasos siguientes
Create and use a CCI — Sintaxis y opciones de la definición de CCI
Notas de la versión — Historial de versiones y nuevas capacidades de CCI