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
- Hiper tabelas do TimescaleDB
- Agregações contínuas
- Políticas de compressão e retenção
- Escolha de índices para séries temporais