Skip to main content
As operações a seguir estão disponíveis:

ADD INDEX

ALTER TABLE [db.]table_name [ON CLUSTER cluster] ADD INDEX [IF NOT EXISTS] name expression TYPE type [GRANULARITY value] [FIRST|AFTER name] - Adiciona a descrição do índice aos metadados das tabelas.

DROP INDEX

ALTER TABLE [db.]table_name [ON CLUSTER cluster] DROP INDEX [IF EXISTS] name - Remove a descrição do índice dos metadados da tabela e exclui os arquivos de índice do disco. Implementado como uma mutação.

MATERIALIZE INDEX

ALTER TABLE [db.]table_name [ON CLUSTER cluster] MATERIALIZE INDEX [IF EXISTS] name [IN PARTITION partition_name] - Reconstrói o índice secundário name para a partition_name especificada. É implementado como uma mutação. Se a cláusula IN PARTITION for omitida, o índice será reconstruído para todos os dados da tabela. MATERIALIZE COLUMN não substitui integralmente MATERIALIZE INDEX. Em partes que são simultaneamente wide + full-storage, ele pode regravar valores de colunas sem atualizar arquivos independentes de índices de salto (ou índices de texto). Os índices de salto comuns armazenados em skp_idx.packed são uma exceção: ainda podem ser recalculados à força em partes wide + full-storage (pequenos subfluxos de índices de salto abaixo do valor padrão de packed_skip_index_max_bytes; índices de texto completo não são empacotados dessa forma). Em qualquer parte que não seja wide + full-storage (incluindo compact + full, compact + packed e wide + packed), uma regravação completa da parte pode recalcular índices já existentes — partes pequenas costumam ser compact, embora ainda usem armazenamento de parte full por padrão. Use MATERIALIZE INDEX como o caminho determinístico / imediato quando um índice for adicionado a uma tabela que já contém dados (ADD INDEX apenas de metadados) e após regravações de colunas em partes wide+full-storage, quando for necessário reconstruir imediatamente os arquivos de índice independentes. Índices recém-adicionados (incluindo índices de texto) em partes históricas também podem ser materializados por uma mesclagem posterior quando materialize_skip_indexes_on_merge estiver habilitado e o índice não for excluído por exclude_materialize_skip_indexes_on_merge; caso contrário, permanecerão não materializados até a execução explícita de MATERIALIZE INDEX.

CLEAR INDEX

ALTER TABLE [db.]table_name [ON CLUSTER cluster] CLEAR INDEX [IF EXISTS] name [IN PARTITION partition_name] - Exclui do disco os arquivos de índice secundário sem remover a descrição. Implementado como uma mutação. Os comandos ADD, DROP e CLEAR são leves no sentido de que apenas alteram os metadados ou removem arquivos. Além disso, eles são replicados, sincronizando os metadados dos índices via ClickHouse Keeper ou ZooKeeper.
A manipulação de índices é compatível apenas com tabelas com o motor *MergeTree (incluindo variantes replicadas).

ALTER simultâneo e MATERIALIZE INDEX com várias cláusulas

Em tabelas replicadas, ALTERs separados executados rapidamente em uma mesma tabela podem gerar CANNOT_ASSIGN_ALTER (código 517) quando ALTERs anteriores ainda não tiverem sido aplicados na réplica (os metadados ainda estarão desatualizados — isso pode continuar ocorrendo mesmo depois que uma alteração anterior já tiver sido atribuída). Essa é uma condição geral de ALTER simultâneo de metadados / mutação (não exclusiva de mutações); serialize as operações/tente novamente, aguarde as alterações anteriores que geram mutações por meio de mutations_sync / is_done em system.mutations ou combine operações de metadados independentes em um único ALTER com várias cláusulas quando a gramática permitir. Consulte Sincronicidade de consultas ALTER e Atribuição simultânea de ALTER. Várias cláusulas MATERIALIZE INDEX podem aparecer em um único ALTER. O caso coberto no código-fonte agrupa várias cláusulas ADD INDEX com MATERIALIZE INDEX para esses mesmos índices novos em uma única instrução (tests/queries/0_stateless/02911_add_index_and_materialize_index.sql). Essa forma agrupada destina-se a bancos de dados comuns (não DatabaseReplicated) — DatabaseReplicated rejeita segmentos mistos de ADD INDEX + MATERIALIZE INDEX com QUERY_IS_PROHIBITED. Formas com várias cláusulas que apenas materializam índices já existentes seguem o mesmo caminho de preparação do snapshot de metadados na implementação atual, mas essa estrutura exata ainda não é coberta por um teste sem estado específico — trate-a como comportamento da implementação atual, e não como um contrato garantido separadamente, até que essa cobertura exista. Para aplicação ordenada, execute um MATERIALIZE INDEX por instrução e aguarde com mutations_sync.
Última modificação em 14 de agosto de 2026