Cada seção traz exemplos com dados de amostra e mostra como verificar o uso do índice na execução da consulta.
Índice MinMax
minmax é mais adequado para predicados de intervalo em dados pouco ordenados ou em colunas correlacionadas com ORDER BY.
EXPLAIN e poda.
Índice set
set quando a cardinalidade local (por bloco) for baixa; ele não ajuda se cada bloco tiver muitos valores distintos.
Índice de texto (text) para busca de texto completo
text é um índice invertido sobre dados de texto tokenizados.
Foi projetado especificamente para cargas de trabalho de busca de texto completo, permitindo a consulta eficiente e determinística de tokens e termos.
É recomendado para casos de uso de linguagem natural ou de pesquisa de texto em larga escala.
Consulte Busca de texto completo com índices de texto para mais detalhes e exemplos.
Filtro de Bloom genérico (scalar)
bloom_filter é adequado para comparações de igualdade e pertença com IN do tipo “agulha no palheiro”. Ele aceita um parâmetro opcional, que é a taxa de falso positivo (padrão: 0.025).
Filtro de Bloom de n-gramas (ngrambf_v1) para busca por substring (Descontinuado)
O uso de índices
ngrambf_v1 para busca de texto completo foi descontinuado nas versões do ClickHouse >= 26.2, em favor dos índices text (consulte aqui para mais detalhes).ngrambf_v1 divide strings em n-gramas. Ele funciona bem para consultas LIKE '%...%'. Ele oferece suporte a String/FixedString/Map (via mapKeys/mapValues), além de permitir ajustar o tamanho, o número de hashes e o seed. Consulte a documentação de Filtro de Bloom de n-gramas para mais detalhes.
Filtro de Bloom de token (tokenbf_v1) para busca por palavras (Obsoleto)
O uso de índices
tokenbf_v1 para busca de texto completo está obsoleto nas versões do ClickHouse >= 26.2, em favor dos índices text (veja aqui para mais detalhes).tokenbf_v1 indexam tokens separados por caracteres não alfanuméricos. Eles devem ser usados com hasToken, padrões de palavra com LIKE ou =/IN. São compatíveis com os tipos String/FixedString/Map.
Consulte as páginas Token filtro de Bloom e filtro de Bloom types para mais detalhes.
token versus ngram aqui.
Adicione índices no CREATE TABLE (vários exemplos)
Map/Tuple/Nested. Isso é demonstrado no exemplo abaixo:
Materialização em dados existentes e verificação
MATERIALIZE e inspecionar a poda com EXPLAIN ou logs de trace, como mostrado abaixo:
Quando usar e quando evitar skip indexes
- Os valores do filtro são esparsos nos blocos de dados
- Há forte correlação com as colunas
ORDER BYou os padrões de ingestão de dados agrupam valores semelhantes - Você realiza pesquisas de texto em grandes conjuntos de logs (tipos
ngrambf_v1/tokenbf_v1)
- É provável que a maioria dos blocos contenha pelo menos um valor correspondente (os blocos serão lidos de qualquer maneira)
- O filtro é aplicado a colunas de alta cardinalidade sem correlação com a ordenação dos dados
Considerações importantesSe um valor aparecer mesmo que uma única vez em um bloco de dados, o ClickHouse precisará ler o bloco inteiro. Teste os índices com conjuntos de dados realistas e ajuste a granularidade e os parâmetros específicos do tipo com base em medições reais de desempenho.
Ignorar temporariamente ou forçar índices
ignore_data_skipping_indices.
Notas e ressalvas
- Índices de salto são compatíveis apenas com tabelas da família MergeTree; a poda ocorre no nível de grânulo/bloco.
- Índices baseados em filtro de Bloom são probabilísticos (falsos positivos causam leituras extras, mas não fazem com que dados válidos sejam ignorados).
- Filtros de Bloom e outros índices de salto devem ser validados com
EXPLAINe rastreamento; ajuste a granularidade para equilibrar a poda e o tamanho do índice.