Todos los productos
Search
Centro de documentos

PolarDB:Reconstrucción de un índice columnar agrupado (CCI)

Última actualización: Sep 05, 2026

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

  1. Establezca la variable MAX_CCI_COUNT

    Establezca 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;
    Nota

    Si la tabla ya tiene varios CCI, establezca MAX_CCI_COUNT en un valor mayor que la cantidad total actual de CCI en esa tabla.

  2. 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.

    Nota
    • Los valores tbl_name e index_name especificados 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