Scelta degli indici per le serie temporali
Scelga gli indici adatti ai carichi di lavoro delle serie temporali: il composito (device_id, ts DESC) copre lo schema più comune.
Scelta degli indici per le serie temporali è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.
La query comune sulle serie temporali
"Dati recenti per un'entità":
SELECT * FROM metrics
WHERE device_id = 42
AND ts >= NOW() - INTERVAL '24 hours'
ORDER BY ts DESC LIMIT 1000;Indice composito (device_id, ts DESC)
L'indice canonico per le serie temporali:
CREATE INDEX metrics_device_ts_idx
ON metrics (device_id, ts DESC);
-- Equality on device_id, range + sort on ts: index handles both.Perché l'ordine è importante
- (device_id, ts) — ideale per "questo dispositivo, dati recenti"
- (ts, device_id) — ideale per "questo momento, tutti i dispositivi"
Scelga in base alla combinazione di query.
BRIN per tabelle append-only
BRIN occupa pochissimo spazio: pochi MB per una tabella da un miliardo di righe. È efficace solo quando i dati sono ordinati fisicamente in base alla colonna indicizzata (come avviene di solito nelle serie temporali):
CREATE INDEX metrics_ts_brin ON metrics USING BRIN (ts);
-- Excellent for "give me last 24 hours" on append-only tables.B-tree vs BRIN
- B-tree — ricerche in millisecondi per id esatto; ricerche per tempo recente
- BRIN — scansioni rapide di intervalli su dati monotoni; manutenzione economica
Può combinarli: B-tree su (device_id), BRIN su (ts).
Indici delle hypertable
TimescaleDB propaga gli indici a tutti i chunk. Elimini gli indici inutilizzati: hanno un costo su ogni chunk.
Indici parziali per i sottoinsiemi più richiesti
Se il 99% delle query riguarda i dati recenti:
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.Evitare funzioni sulla colonna indicizzata
Non applichi funzioni alla colonna indicizzata: impediscono l'uso dell'indice:
-- BAD:
WHERE date_trunc('hour', ts) = $1
-- GOOD:
WHERE ts >= $1 AND ts < $1 + INTERVAL '1 hour'Indice per le query sulla riga più recente
Per ottenere "la lettura più recente per dispositivo", l'indice corretto trasforma la query in una scansione per intervallo dell'indice:
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.Clusterizzare secondo l'ordinamento più usato
CLUSTER riordina fisicamente la tabella in base a un indice. È un'operazione eseguita una sola volta; i nuovi dati continuano ad essere aggiunti nell'ordine di arrivo:
CLUSTER metrics USING metrics_device_ts_idx;
-- Cluster is heavy. TimescaleDB chunks help by keeping recent chunks small.Indice hash per uguaglianze ad alta cardinalità
Viene usato raramente per le serie temporali, ma esiste. Un B-tree su device_id è solitamente sufficiente.
Non crei troppi indici
Le tabelle di serie temporali ricevono molte scritture. Ogni indice comporta un'amplificazione delle scritture. Aggiunga solo gli indici necessari alle query.
Riepilogo
L'indicizzazione delle serie temporali si basa su pochi pattern.
- Composito (entity, ts DESC) per le query per entità
- BRIN su ts per le query di intervallo su dati append-only
- Hypertable: gli indici vengono propagati ai chunk
- Eviti i predicati che applicano funzioni alle colonne
Verifica rapida
La query sulle serie temporali più utilizzata filtra per device_id e legge le ultime 24 ore. Qual è l'indice migliore?
Impara SQL con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 46
- Lezioni
- 183
Domande Frequenti
La lezione «Scelta degli indici per le serie temporali» è gratuita?
Sì — il testo completo di «Scelta degli indici per le serie temporali» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.
Cosa imparerò in «Scelta degli indici per le serie temporali»?
Scelga gli indici adatti ai carichi di lavoro delle serie temporali: il composito (device_id, ts DESC) copre lo schema più comune. Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare SQL Academy?
Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Scelta degli indici per le serie temporali»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione SQL Academy?
Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Hypertable di TimescaleDB
- Aggregati continui
- Criteri di compressione e conservazione
- Scelta degli indici per le serie temporali