0Pricing
SQL Academy · Lektion

Indexauswahl für Zeitreihen

Wählen Sie die passenden Indizes für Zeitreihen-Arbeitslasten – ein zusammengesetzter Index (device_id, ts DESC) deckt das gängige Muster ab.

Indexauswahl für Zeitreihen ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Die gängige Zeitreihenabfrage

„Aktuelle Daten für eine Entität“:

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

Zusammengesetzter Index (device_id, ts DESC)

Der maßgebliche Index für Zeitreihen:

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

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

Warum die Reihenfolge wichtig ist

  • (device_id, ts) — am besten für „dieses Gerät, aktuelle Daten“
  • (ts, device_id) — am besten für „dieser Zeitpunkt, alle Geräte“

Wählen Sie den Index anhand der Mischung Ihrer Abfragen.

BRIN für Append-only-Tabellen

BRIN ist sehr klein — wenige MB für eine Tabelle mit einer Milliarde Zeilen. Der Index ist nur effektiv, wenn die Daten physisch nach der indizierten Spalte sortiert sind (was bei Zeitreihen normalerweise der Fall ist):

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 — Suchen nach einer exakten ID im Millisekundenbereich; Suchen nach aktuellen Zeitpunkten
  • BRIN — schnelle Bereichssuchen bei monotonen Daten; kostengünstige Pflege

Sie können beide kombinieren: B-tree auf (device_id), BRIN auf (ts).

Hypertable-Indizes

TimescaleDB überträgt Indizes auf alle Chunks. Entfernen Sie nicht verwendete Indizes — sie verursachen Kosten auf jedem Chunk.

Partielle Indizes für häufig verwendete Teilmengen

Wenn 99 % der Abfragen aktuelle Daten betreffen:

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.

Funktionen auf der Indexspalte vermeiden

Wenden Sie keine Funktionen auf die indizierte Spalte an — dadurch kann der Index nicht verwendet werden:

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

Index für Abfragen der neuesten Zeile

Für „den neuesten Messwert pro Gerät“ verwandelt der richtige Index die Abfrage in eine Indexbereichssuche:

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.

Nach der häufig verwendeten Reihenfolge clustern

CLUSTER ordnet die Tabelle physisch anhand eines Index neu. Das ist ein einmaliger Vorgang; neue Daten werden weiterhin in der Reihenfolge ihres Eintreffens angehängt:

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

Hash-Index für Gleichheitsabfragen mit hoher Kardinalität

Für Zeitreihen wird er nur selten verwendet, ist aber verfügbar. Ein B-tree auf device_id reicht normalerweise aus.

Nicht zu viele Indizes anlegen

Zeitreihentabellen sind schreibintensiv. Jeder Index bedeutet zusätzliche Schreibvorgänge. Fügen Sie nur Indizes für Abfragen hinzu, die Sie tatsächlich ausführen.

Zusammenfassung

Die Indizierung von Zeitreihen basiert auf wenigen Mustern.

  • Zusammengesetzter Index (entity, ts DESC) für Abfragen pro Entität
  • BRIN auf ts für Bereichsabfragen bei ausschließlich angehängten Daten
  • Bei Hypertables werden Indizes auf Chunks übertragen
  • Prädikate mit Funktionen auf Spalten vermeiden

Kurzer Check

Ihre wichtigste Zeitreihenabfrage filtert nach device_id und liest die letzten 24 Stunden. Welcher Index ist am besten geeignet?

Häufig gestellte Fragen

Ist die Lektion „Indexauswahl für Zeitreihen“ kostenlos?

Ja — der vollständige Text von „Indexauswahl für Zeitreihen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Indexauswahl für Zeitreihen“?

Wählen Sie die passenden Indizes für Zeitreihen-Arbeitslasten – ein zusammengesetzter Index (device_id, ts DESC) deckt das gängige Muster ab. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um SQL Academy zu starten?

Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Indexauswahl für Zeitreihen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?

Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. TimescaleDB-Hypertables
  2. Kontinuierliche Aggregationen
  3. Komprimierungs- und Aufbewahrungsrichtlinien
  4. Indexauswahl für Zeitreihen
← Zurück zu SQL Academy