- minmax: Realiza un seguimiento del valor mínimo y máximo de una expresión por bloque. Ideal para consultas de rango sobre datos poco ordenados.
- set(N): Realiza un seguimiento de un conjunto de valores hasta un tamaño N especificado para cada bloque. Eficaz en columnas con baja cardinalidad por bloque.
- text: Crea un índice invertido sobre datos de texto tokenizados, lo que permite una búsqueda de texto completo eficiente y determinista. Se recomienda para lenguaje natural o columnas grandes de texto libre en las que se requiere una búsqueda precisa de tokens y una búsqueda escalable de varios términos, en lugar de enfoques aproximados basados en filtros Bloom.
- bloom_filter: Determina probabilísticamente si un valor existe en un bloque, lo que permite un filtrado aproximado rápido para comprobar la pertenencia a un conjunto. Eficaz para optimizar consultas que buscan la “aguja en un pajar”, donde se necesita una coincidencia positiva.
- tokenbf_v1 / ngrambf_v1: (Obsoleto) Variantes especializadas de filtros Bloom diseñadas para buscar tokens o secuencias de caracteres en cadenas, especialmente útiles para datos de logs o casos de uso de búsqueda de texto. Obsoleto en las versiones de ClickHouse >= 26.2 en favor de los índices de texto.
- Columnas con alta cardinalidad general pero baja cardinalidad dentro de un bloque.
- Valores poco frecuentes que son fundamentales para la búsqueda (p. ej., códigos de error, ID específicos).
- Casos en los que el filtrado se realiza sobre columnas que no forman parte de la clave primaria y tienen una distribución localizada.
- Pruebe los índices de omisión con datos reales y consultas realistas. Pruebe distintos tipos de índice y valores de granularidad.
- Evalúe su impacto usando herramientas como send_logs_level=‘trace’ y
EXPLAIN indexes=1para ver la eficacia del índice. - Evalúe siempre el tamaño de un índice y cómo se ve afectado por la granularidad. Reducir el tamaño de la granularidad a menudo mejorará el rendimiento hasta cierto punto, lo que hará que se filtren más gránulos y que también sea necesario escanearlos. Sin embargo, a medida que el tamaño del índice aumenta con una granularidad menor, el rendimiento también puede degradarse. Mida el rendimiento y el tamaño del índice para distintos valores de granularidad. Esto es especialmente pertinente en los índices de filtros Bloom.
Ejemplo
EXPLAIN indexes = 1:
ViewCount está correlacionado con CreationDate (una clave primaria), como era de esperar: cuanto más tiempo lleva publicada una entrada, más tiempo ha tenido para ser visualizada.
ALTER TABLE: primero lo añadimos y luego “lo materializamos”.
ViewCount para cada bloque de filas (gránulo) de la tabla:
Si repetimos la consulta anterior, veremos mejoras significativas en el rendimiento. Observe la reducción en el número de filas analizadas:
EXPLAIN indexes = 1 confirma que se usa el índice.
ViewCount > 10,000,000 en nuestra consulta de ejemplo: