Skip to main content

Otimização de Consultas

O Data Warehouse é construído sobre o ClickHouse, um banco de dados colunar. Isso significa que as consultas se comportam de forma diferente de um banco de dados relacional tradicional. Aqui explicamos como aproveitar a estrutura para obter resultados rápidos.

Princípios Fundamentais

1. Sempre filtre por data

Todas as tabelas de fatos são particionadas por mês (toYYYYMM(created_at)). Filtrar por data permite ao ClickHouse pular partições inteiras sem lê-las.

2. Você não precisa filtrar por company_id

Seu usuário tem uma política de linha que filtra automaticamente pela sua empresa. Você não precisa adicionar WHERE company_id = ... — é aplicado de forma transparente.

3. Selecione apenas as colunas que precisa

ClickHouse é colunar: ele só lê as colunas que você menciona no seu SELECT. Menos colunas = menos dados lidos = mais rápido.

4. Use LIMIT para explorar

Ao explorar dados, use LIMIT para evitar trazer milhões de linhas:

Estrutura Interna das Tabelas

Cada tabela tem uma ordem de classificação (sort key) que determina como os dados são organizados em disco. Consultas que filtram pelas primeiras colunas do sort key são muito mais eficientes.

Sort Keys por Tabela

company_id é sempre a primeira coluna do sort key. Como seu usuário tem um filtro automático por empresa, todas as suas consultas aproveitam essa otimização sem que você precise fazer nada.

Índices Secundários

Algumas tabelas têm índices adicionais que ajudam a filtrar por colunas que não estão no sort key:

Limites do Sistema

Seu usuário tem os seguintes limites para proteger a estabilidade do sistema: Se sua consulta exceder algum desses limites, ela será cancelada automaticamente. Para evitar:
  • Adicione filtros de data mais estreitos
  • Selecione menos colunas
  • Use LIMIT
  • Pré-agregue com GROUP BY em vez de trazer linhas individuais

Padrões Comuns

JOIN entre tabelas de fatos

Você pode cruzar tabelas usando conversation_id ou survey_user_id:

JOIN com dimensões

Nível de serviço personalizado