0Pricing
SQL Academy · Aula

Escolha de índices para séries temporais

Escolha os índices adequados para cargas de trabalho de séries temporais — o índice composto (device_id, ts DESC) atende ao padrão mais comum.

Escolha de índices para séries temporais é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.

A consulta comum de séries temporais

"Dados recentes de uma entidade":

SELECT * FROM metrics
WHERE device_id = 42
  AND ts >= NOW() - INTERVAL '24 hours'
ORDER BY ts DESC LIMIT 1000;

Índice composto (device_id, ts DESC)

O índice padrão para séries temporais:

CREATE INDEX metrics_device_ts_idx
  ON metrics (device_id, ts DESC);

-- Equality on device_id, range + sort on ts: index handles both.

Por que a ordem é importante

  • (device_id, ts) — melhor para "este dispositivo, dados recentes"
  • (ts, device_id) — melhor para "este horário, todos os dispositivos"

Escolha de acordo com a combinação de consultas.

BRIN para tabelas somente de acréscimo

BRIN é minúsculo — alguns MB para uma tabela com um bilhão de linhas. Só é eficaz quando os dados estão fisicamente ordenados pela coluna indexada (como geralmente ocorre com séries temporais):

CREATE INDEX metrics_ts_brin ON metrics USING BRIN (ts);
-- Excellent for "give me last 24 hours" on append-only tables.

B-tree versus BRIN

  • B-tree — buscas em milissegundos por identificador exato; buscas por horário recente
  • BRIN — varreduras rápidas de intervalos em dados monotônicos; manutenção barata

Você pode combiná-los: B-tree em (device_id), BRIN em (ts).

Índices de hypertable

TimescaleDB propaga os índices para todos os blocos. Remova índices não utilizados — eles têm custo em cada bloco.

Índices parciais para subconjuntos mais acessados

Se 99% das consultas acessarem dados recentes:

CREATE INDEX metrics_recent_idx
  ON metrics (device_id, ts DESC)
  WHERE ts >= NOW() - INTERVAL '7 days';
-- Issue: predicate must use literal date or be re-created periodically.

Evitar funções na coluna do índice

Não aplique funções à coluna indexada — isso impede o uso do índice:

-- BAD:
WHERE date_trunc('hour', ts) = $1
-- GOOD:
WHERE ts >= $1 AND ts < $1 + INTERVAL '1 hour'

Índice para consultas da linha mais recente

Para obter "a leitura mais recente por dispositivo", o índice correto transforma a consulta em uma varredura de intervalo do índice:

CREATE INDEX metrics_device_ts_idx ON metrics (device_id, ts DESC);

SELECT DISTINCT ON (device_id) device_id, ts, value
FROM metrics
ORDER BY device_id, ts DESC;
-- Uses the index to take the first row per device.

CLUSTER na ordem mais acessada

CLUSTER reordena fisicamente a tabela de acordo com um índice. É uma operação única; os dados novos continuam sendo acrescentados na ordem de chegada:

CLUSTER metrics USING metrics_device_ts_idx;
-- Cluster is heavy. TimescaleDB chunks help by keeping recent chunks small.

Índice Hash para igualdade com alta cardinalidade

Raramente usado em séries temporais, mas existe. B-tree em device_id geralmente é suficiente.

Não crie índices em excesso

Tabelas de séries temporais recebem muitas gravações. Cada índice = amplificação de gravações. Adicione apenas o que você consulta.

Resumo

A indexação de séries temporais consiste em um pequeno conjunto de padrões.

  • Composto (entidade, ts DESC) para consultas por entidade
  • BRIN em ts para consultas de intervalos somente de acréscimo
  • Hypertables: os índices são propagados para os blocos
  • Evite predicados com funções aplicadas à coluna

Verificação rápida

Sua consulta de séries temporais mais frequente filtra por device_id e lê as últimas 24 horas. Qual é o melhor índice?

Perguntas Frequentes

A aula “Escolha de índices para séries temporais” é grátis?

Sim — o texto completo de “Escolha de índices para séries temporais” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.

O que vou aprender em “Escolha de índices para séries temporais”?

Escolha os índices adequados para cargas de trabalho de séries temporais — o índice composto (device_id, ts DESC) atende ao padrão mais comum. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar SQL Academy?

Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Escolha de índices para séries temporais”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de SQL Academy?

Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Hiper tabelas do TimescaleDB
  2. Agregações contínuas
  3. Políticas de compressão e retenção
  4. Escolha de índices para séries temporais
← Voltar para SQL Academy