- minmax: Rastreia o valor mínimo e máximo de uma expressão por bloco. Ideal para consultas de intervalo em dados pouco ordenados.
- set(N): Rastreia um conjunto de valores até um tamanho N especificado para cada bloco. Eficaz em colunas com baixa cardinalidade por bloco.
- text: Cria um índice invertido sobre dados de string tokenizados, permitindo full-text search eficiente e determinística. Recomendado para linguagem natural ou colunas grandes de texto livre, em que são necessárias busca precisa de tokens e busca escalável com múltiplos termos, em vez de abordagens aproximadas baseadas em filtro de Bloom.
- bloom_filter: Determina probabilisticamente se um valor existe em um bloco, permitindo filtragem aproximada rápida para pertencimento a conjuntos. Eficaz para otimizar consultas que procuram a “agulha no palheiro”, quando é necessária uma correspondência positiva.
- tokenbf_v1 / ngrambf_v1: (Obsoleto) Variantes especializadas de filtro de Bloom projetadas para pesquisar tokens ou sequências de caracteres em strings — particularmente úteis para dados de logs ou casos de uso de busca em texto. Obsoletas em versões do ClickHouse >= 26.2 em favor de text indexes.
- Colunas com alta cardinalidade geral, mas baixa cardinalidade dentro de um bloco.
- Valores raros que são críticos para busca (por exemplo, códigos de erro, IDs específicos).
- Casos em que a filtragem ocorre em colunas que não fazem parte da chave primária, com distribuição localizada.
- Teste índices de omissão em dados reais com consultas realistas. Experimente diferentes tipos de índice e valores de granularidade.
- Avalie o impacto deles usando ferramentas como send_logs_level=‘trace’ e
EXPLAIN indexes=1para ver a eficácia do índice. - Sempre avalie o tamanho de um índice e como ele é impactado pela granularidade. Reduzir o tamanho da granularidade frequentemente melhora o desempenho até certo ponto, resultando em mais grânulos sendo filtrados e precisando ser examinados. No entanto, à medida que o tamanho do índice aumenta com menor granularidade, o desempenho também pode se degradar. Meça o desempenho e o tamanho do índice para vários níveis de granularidade. Isso é particularmente pertinente em índices de filtro de Bloom.
Exemplo
EXPLAIN indexes = 1:
ViewCount é correlacionado com CreationDate (uma chave primária), como era de se esperar — quanto mais tempo uma postagem existe, mais tempo ela tem para ser visualizada.
ALTER TABLE — primeiro o adicionamos e, em seguida, “o materializamos”.
ViewCount para cada bloco de linhas (grânulo) da tabela:
Ao repetir a consulta anterior, vemos melhorias significativas no desempenho. Observe o número reduzido de linhas analisadas:
EXPLAIN indexes = 1 confirma que o índice está sendo usado.
ViewCount > 10,000,000 em nossa consulta de exemplo: