Cada sección ofrece ejemplos con datos de ejemplo y muestra cómo verificar el uso del índice durante la ejecución de consultas.
Índice MinMax
minmax es más adecuado para predicados de rango en datos poco ordenados o en columnas correlacionadas con ORDER BY.
EXPLAIN y poda.
Índice set
set cuando la cardinalidad local (por bloque) sea baja; no es útil si cada bloque tiene muchos valores distintos.
Índice de texto (text) para búsqueda de texto completo
text es un índice invertido sobre datos de texto tokenizados.
Está diseñado específicamente para cargas de trabajo de búsqueda de texto completo, lo que permite una búsqueda eficiente y determinista de tokens y términos.
Se recomienda para casos de uso de lenguaje natural o de búsqueda de texto a gran escala.
Consulta Búsqueda de texto completo con índices de texto para obtener más detalles y ejemplos.
Filtro Bloom genérico (escalar)
bloom_filter es adecuado para búsquedas de igualdad o pertenencia en IN del tipo “aguja en un pajar”. Acepta un parámetro opcional, que es la tasa de falsos positivos (valor predeterminado: 0.025).
Filtro Bloom de n-gramas (ngrambf_v1) para la búsqueda de subcadenas (Obsoleto)
El uso de índices
ngrambf_v1 para la búsqueda de texto completo está obsoleto en las versiones de ClickHouse >= 26.2 en favor de los índices text (consulta aquí para más detalles).ngrambf_v1 divide las cadenas en n-gramas. Funciona bien para consultas LIKE '%...%'. Admite String/FixedString/Map (mediante mapKeys/mapValues), así como un tamaño configurable, número de funciones hash y semilla. Consulta la documentación de N-gram bloom filter para más detalles.
Filtro Bloom de tokens (tokenbf_v1) para búsquedas por palabras (Obsoleto)
El uso de índices
tokenbf_v1 para la búsqueda de texto completo está obsoleto en las versiones de ClickHouse >= 26.2 en favor de los índices text (consulta aquí para obtener más información).tokenbf_v1 indexa tokens separados por caracteres no alfanuméricos. Debe usarse con hasToken, patrones de palabras con LIKE o equals/IN. Es compatible con los tipos String/FixedString/Map.
Consulta las páginas Filtro Bloom de tokens y Tipos de filtros Bloom para obtener más información.
Agregar índices durante CREATE TABLE (varios ejemplos)
Map/Tuple/Nested. Esto se demuestra en el ejemplo siguiente:
Materializar datos existentes y verificarlo
MATERIALIZE y examinar la poda con EXPLAIN o con logs de nivel trace, como se muestra a continuación:
Cuándo usar y cuándo evitar los índices de omisión
- Los valores de filtro son dispersos dentro de los bloques de datos
- Existe una fuerte correlación con las columnas de
ORDER BY, o los patrones de ingestión de datos agrupan valores similares - Se realizan búsquedas de texto en grandes conjuntos de logs (tipos
ngrambf_v1/tokenbf_v1)
- Es probable que la mayoría de los bloques contengan al menos un valor coincidente (los bloques se leerán de todos modos)
- Se filtra por columnas de alta cardinalidad sin correlación con el orden de los datos
Consideraciones importantesSi un valor aparece aunque sea una sola vez en un bloque de datos, ClickHouse debe leer el bloque completo. Pruebe los índices con conjuntos de datos realistas y ajuste la granularidad y los parámetros específicos del tipo en función de mediciones de rendimiento reales.
Ignorar temporalmente o forzar índices
ignore_data_skipping_indices.
Notas y advertencias
- Los índices de omisión solo son compatibles con las tablas de la familia MergeTree; la poda se realiza a nivel de gránulo/bloque.
- Los índices basados en filtros de Bloom son probabilísticos (los falsos positivos generan lecturas adicionales, pero no omiten datos válidos).
- Los filtros de Bloom y otros índices de omisión deben validarse con
EXPLAINy tracing; ajuste la granularidad para equilibrar la poda y el tamaño del índice.