Todos os produtos
Search
Central de documentação

PolarDB:Reconstruir um índice colunar clusterizado

Última atualização: Jun 28, 2026

Reconstrua um índice colunar clusterizado (CCI) para alterar sua definição — como a chave de ordenação, a chave de partição ou o número de partições — sem interromper consultas em execução ou operações de escrita.

Pré-requisitos

Antes de começar, verifique se:

  • Já existe um CCI na tabela de destino

  • A instância executa a versão 5.4.20-20250714 ou posterior

Para regras de nomenclatura de versões, consulte Notas de versão . Para verificar a versão da instância, consulte Visualize e atualize a versão de uma instância .

Quando reconstruir um CCI

Reconstrua um CCI nas seguintes situações:

  • A chave de ordenação ou de partição atual não corresponde mais aos padrões de acesso das consultas e o desempenho está abaixo do esperado

  • Colunas usadas no índice foram adicionadas, removidas ou modificadas e as consultas associadas mudaram

  • O volume de dados cresceu a ponto de a estratégia de particionamento original criar distribuição desigual ou gerar excesso ou falta de partições

  • Uma coluna baseada em tempo distribuiria melhor os dados entre as partições em grandes conjuntos de dados de séries temporais

  • Uma atualização do banco de dados introduziu novos recursos de CCI que exigem reconstrução para ativação

Como funciona

A reconstrução cria um novo CCI com a definição atualizada e remove o CCI original. Como ambos coexistem temporariamente durante esse processo, aumente o limite de MAX_CCI_COUNT antes de iniciar.

A reconstrução ocorre online e não adquire bloqueios; portanto, as consultas existentes no CCI e na tabela subjacente baseada em linhas continuam em execução sem interrupção.

Reconstruir um CCI

  1. Defina a variável MAX_CCI_COUNT

    Defina MAX_CCI_COUNT como pelo menos 2 para permitir a coexistência temporária do CCI antigo e do novo.

    SET GLOBAL MAX_CCI_COUNT = 2;
    Nota

    Se a tabela já tiver vários CCIs, defina MAX_CCI_COUNT com um valor superior ao total atual de CCIs nessa tabela.

  2. Reconstrua o índice

    Reconstrua o índice usando uma operação síncrona ou assíncrona.

    Modo

    Comportamento

    Quando usar

    Síncrono

    Bloqueia a sessão atual até a conclusão da reconstrução

    Tabelas pequenas a médias com tempo curto de reconstrução

    Assíncrono (recomendado)

    Retorna imediatamente; a reconstrução é executada em segundo plano

    Tabelas grandes em que uma reconstrução longa bloquearia a sessão

    Reconstrução síncrona

    ALTER TABLE tbl_name REBUILD CLUSTERED COLUMNAR INDEX index_name [CCI DEFINITION];

    Para a sintaxe completa da definição de CCI, consulte Crie e use um CCI.

    Nota
    • Os valores especificados para tbl_name e index_name devem existir; caso contrário, o sistema retornará um erro.

    • Não é possível reconstruir CCIs arquivados.

    Reconstrução assíncrona (Recomendada para tabelas grandes)

    ALTER TABLE tbl_name REBUILD CLUSTERED COLUMNAR INDEX index_name [CCI DEFINITION] ASYNC=TRUE;

Exemplo

Este exemplo altera a chave de ordenação de id para seller_id e aumenta o número de partições de 4 para 16.

1. Crie uma tabela com um CCI inicial.

A chave de ordenação e a chave de partição estão definidas como id, com 4 partições 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 o limite de CCI.

SET GLOBAL MAX_CCI_COUNT = 2;

3. Reconstrua o CCI com a nova definição.

A chave de ordenação muda para seller_id e o número de partições muda para 16.

ALTER TABLE `t_order`
REBUILD CLUSTERED COLUMNAR INDEX `cci_test`(`seller_id`) PARTITION BY KEY(`id`) PARTITIONS 16;

4. Verifique o esquema atualizado.

SHOW CREATE TABLE t_order\G

A saída confirma a atualização da definição do CCI:

*************************** 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

Próximos passos