ADD INDEX
ALTER TABLE [db.]table_name [ON CLUSTER cluster] ADD INDEX [IF NOT EXISTS] name expression TYPE type [GRANULARITY value] [FIRST|AFTER name] - Agrega la definición del índice a los metadatos de la tabla.
DROP INDEX
ALTER TABLE [db.]table_name [ON CLUSTER cluster] DROP INDEX [IF EXISTS] name - Elimina la definición del índice de los metadatos de las tablas y borra los archivos de índice del disco. Se implementa como una mutación.
MATERIALIZE INDEX
ALTER TABLE [db.]table_name [ON CLUSTER cluster] MATERIALIZE INDEX [IF EXISTS] name [IN PARTITION partition_name] - Reconstruye el índice secundario name para la partition_name especificada. Se implementa como una mutación. Si se omite la cláusula IN PARTITION, reconstruye el índice para todos los datos de la tabla.
MATERIALIZE COLUMN no sustituye por completo a MATERIALIZE INDEX. En las partes que son simultáneamente wide + Full, puede reescribir los valores de las columnas sin actualizar los archivos independientes de índices de omisión (o índices de texto). Los índices de omisión convencionales almacenados en skp_idx.packed constituyen una excepción: todavía pueden recalcularse de forma forzada en partes wide + Full (substreams pequeños de índices de omisión por debajo del valor predeterminado de packed_skip_index_max_bytes; los índices de texto completo no se empaquetan de este modo). En cualquier parte que no sea wide + Full (incluidas compact + Full, compact + packed y wide + packed), una reescritura completa de la parte puede recalcular los índices ya existentes; las partes pequeñas suelen ser compact y, aun así, usan almacenamiento de partes Full de forma predeterminada. Use MATERIALIZE INDEX como vía determinista e inmediata cuando se haya añadido un índice a una tabla que ya contiene datos (ADD INDEX solo de metadatos), y después de reescribir columnas en partes wide+Full si necesita reconstruir de inmediato los archivos de índices independientes. Los índices añadidos recientemente (incluidos los índices de texto) en partes históricas también pueden materializarse durante una combinación posterior cuando materialize_skip_indexes_on_merge está habilitado y el índice no se excluye mediante exclude_materialize_skip_indexes_on_merge; de lo contrario, permanecen sin materializar hasta que se ejecute explícitamente MATERIALIZE INDEX.
CLEAR INDEX
ALTER TABLE [db.]table_name [ON CLUSTER cluster] CLEAR INDEX [IF EXISTS] name [IN PARTITION partition_name] - Elimina del disco los archivos de índices secundarios sin eliminar su definición. Se implementa como una mutación.
Los comandos ADD, DROP y CLEAR son operaciones ligeras, en el sentido de que solo modifican metadatos o eliminan archivos.
Además, se replican y sincronizan los metadatos de los índices mediante ClickHouse Keeper o ZooKeeper.
La manipulación de índices solo se admite en tablas con motor
*MergeTree (incluidas las variantes replicated).ALTER concurrente y MATERIALIZE INDEX con varias cláusulas
ALTER independientes ejecutados rápidamente sobre una misma tabla pueden generar CANNOT_ASSIGN_ALTER (código 517) cuando los ALTER anteriores aún no se han aplicado en la réplica (los metadatos siguen desactualizados; esto puede seguir siendo así aunque ya se haya asignado un alter anterior). Esta es una condición general de concurrencia entre ALTER de metadatos y mutaciones (no exclusiva de las mutaciones); serialice o reintente las operaciones, espere a los alters anteriores que generan mutaciones mediante mutations_sync / is_done en system.mutations, o combine operaciones de metadatos independientes en un único ALTER con varias cláusulas cuando la gramática lo permita. Consulte Sincronía de las consultas ALTER y Asignación concurrente de ALTER.
Varias cláusulas MATERIALIZE INDEX pueden incluirse en un mismo ALTER. El caso cubierto en el árbol consiste en agrupar varias cláusulas ADD INDEX junto con MATERIALIZE INDEX para esos mismos índices nuevos en una única sentencia (tests/queries/0_stateless/02911_add_index_and_materialize_index.sql). Esta forma agrupada es para bases de datos ordinarias (no DatabaseReplicated); DatabaseReplicated rechaza segmentos mixtos de ADD INDEX + MATERIALIZE INDEX con QUERY_IS_PROHIBITED. Las formas con varias cláusulas que solo materializan índices ya existentes siguen la misma ruta de preparación basada en una instantánea de metadatos en la implementación actual, pero esa configuración exacta aún no está cubierta por una prueba específica sin estado; considérela comportamiento de la implementación actual, no un contrato garantizado por separado, hasta que exista dicha cobertura. Para una aplicación ordenada, ejecute un MATERIALIZE INDEX por sentencia y espere con mutations_sync.