Como funciona o índice primário esparso no ClickHouse?
O índice primário esparso no ClickHouse ajuda a identificar com eficiência grânulos — blocos de linhas — que podem conter dados que correspondam à condição de uma consulta nas colunas de chave primária da tabela. Na próxima seção, explicamos como esse índice é construído com base nos valores dessas colunas.
Criação do índice primário esparso
Para processamento, os dados de cada coluna são ④ divididos logicamente em grânulos — cada um cobrindo 8.192 linhas —, que são as menores unidades com que o mecanismo de processamento de dados do ClickHouse trabalha. Essa estrutura em grânulos também é o que torna o índice primário esparso: em vez de indexar cada linha, o ClickHouse armazena ⑤ os valores da chave primária de apenas uma linha por grânulo — especificamente, a primeira linha. Isso resulta em uma entrada de índice por grânulo:
Graças à sua esparsidade, o índice primário é pequeno o suficiente para caber inteiramente na memória, permitindo filtragem rápida para consultas com predicados nas colunas da chave primária. Na próxima seção, mostramos como ele ajuda a acelerar essas consultas.
Mostramos como o índice primário esparso é usado para acelerar consultas com outra animação:
① A consulta de exemplo inclui um predicado em ambas as colunas da chave primária:
town = 'LONDON' AND street = 'OXFORD STREET'.
② Para acelerar a consulta, o ClickHouse carrega na memória o índice primário da tabela.
③ Em seguida, ele percorre as entradas do índice para identificar quais grânulos podem conter linhas que correspondam ao predicado — em outras palavras, quais grânulos não podem ser ignorados.
④ Esses grânulos potencialmente relevantes são então carregados e processados na memória, junto com os grânulos correspondentes de quaisquer outras colunas necessárias para a consulta.
Monitoramento de índices primários
Principais pontos
- Índices primários esparsos ajudam o ClickHouse a ignorar dados desnecessários ao identificar quais grânulos podem conter linhas que correspondam às condições da consulta nas colunas da chave primária.
- Cada índice armazena apenas os valores da chave primária da primeira linha de cada grânulo (um grânulo tem 8.192 linhas por padrão), tornando-se compacto o bastante para caber na memória.
- Cada parte de dados em uma tabela MergeTree tem seu próprio índice primário, que é usado de forma independente durante a execução da consulta.
- Durante as consultas, o índice permite que o ClickHouse ignore grânulos, reduzindo a E/S e o uso de memória e acelerando o desempenho.
-
Você pode inspecionar o conteúdo do índice usando a função de tabela
mergeTreeIndexe monitorar o uso do índice com a cláusulaEXPLAIN.