Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

ALTER TABLE ... INDEX

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.

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.

Navigation