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
-
Defina a variável
MAX_CCI_COUNTDefina 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;NotaSe a tabela já tiver vários CCIs, defina MAX_CCI_COUNT com um valor superior ao total atual de CCIs nessa tabela.
-
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.
NotaOs valores especificados para
tbl_nameeindex_namedevem 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
Crie e use um CCI — Sintaxe e opções de definição de CCI
Notas de versão — Histórico de versões e novos recursos de CCI