Effiziente Abfragen über Partitionen hinweg
Schreiben Sie Abfragen, die vom Partition Pruning profitieren, und überprüfen Sie das Pruning mit EXPLAIN.
Effiziente Abfragen über Partitionen hinweg 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.
Nach dem Partitionsschlüssel filtern
Pruning funktioniert nur, wenn die WHERE-Klausel den Partitionsschlüssel enthält:
-- Prunes (uses date partitioning):
SELECT * FROM events WHERE ts >= '2024-03-01' AND ts < '2024-04-01';
-- No pruning — scans all partitions:
SELECT * FROM events WHERE user_id = 42;Zusammengesetztes Pruning
Der Planer kann in Tabellen mit mehrstufiger Partitionierung nach mehreren Schlüsseln prunen:
SELECT * FROM events
WHERE ts >= '2024-03-01' AND ts < '2024-04-01'
AND user_id = 42;
-- Prunes by date AND by hash partition.EXPLAIN zeigt Pruning
Prüfen Sie den Plan, um zu bestätigen, dass Pruning stattfindet:
EXPLAIN SELECT * FROM events WHERE ts >= '2024-03-01' AND ts < '2024-04-01';
-- Append
-- -> Seq Scan on events_2024_q1
-- Only Q1 partition shown; others pruned.Constraint Exclusion vs. Partition Pruning
Modernes PG verwendet standardmäßig das schnelle „partition pruning“. Das ältere „constraint exclusion“ war langsamer. Stellen Sie sicher, dass enable_partition_pruning = on aktiviert ist.
Pruning zur Ausführungszeit
Auch bei parametrisierten Abfragen (PREPARE) kann PG zur Ausführungszeit prunen:
PREPARE p(timestamptz, timestamptz) AS
SELECT * FROM events WHERE ts >= $1 AND ts < $2;
EXECUTE p('2024-03-01', '2024-04-01');
-- Pruning happens at execute, not at parse.Partitionsübergreifende Indizes
Indizes werden auf Partitionen übertragen. Eine Abfrage für die indizierte Spalte funktioniert über alle Partitionen hinweg – der Planer durchsucht jedoch den Index jeder einzelnen Partition.
Partitionsübergreifende Aggregationen
Ein GROUP BY für den Partitionsschlüssel profitiert am meisten. Ein GROUP BY für andere Spalten durchsucht jede Partition.
Parallele Ausführung pro Partition
PostgreSQL kann Scans über Partitionen hinweg parallel ausführen (PG 11+):
SET max_parallel_workers_per_gather = 4;
EXPLAIN SELECT COUNT(*) FROM events;
-- Parallel Append over partitions.Joins über partitionierte Tabellen hinweg
Wenn beide partitionierten Tabellen denselben Partitionsschlüssel verwenden, ist ein „partition-wise join“ schneller – jede Partition wird unabhängig verknüpft:
SET enable_partitionwise_join = on;
-- Now PG can join events to event_metrics partition-by-partition.Häufige Fehler vermeiden
- Wenden Sie in WHERE keine Funktionen auf den Partitionsschlüssel an – dadurch wird Pruning verhindert
- Vergessen Sie den Partitionsschlüssel in Ihren Abfragen nicht
- Erstellen Sie nicht Tausende winziger Partitionen – der Planungsaufwand dominiert
Sinnvolle Anzahl von Partitionen
Streben Sie einige Dutzend bis wenige Hundert Partitionen an, nicht Tausende. Jede Partition verursacht zusätzlichen Planungsaufwand. Für sehr fein abgestufte Anforderungen können Sie Unterpartitionen verwenden.
Wartung pro Partition
VACUUM, ANALYZE und REINDEX werden pro Partition ausgeführt und können parallel laufen. Je mehr Partitionen Sie haben, desto stärker wirkt sich der Vorteil aus – in einem vernünftigen Rahmen.
Zusammenfassung
Partitionierung belohnt Abfragen, die nach dem Partitionsschlüssel filtern.
- WHERE für den Partitionsschlüssel → Pruning
- Mit EXPLAIN bestätigen
- Partition-wise Join für passende Joins aktivieren
- Nicht übermäßig partitionieren
Kurzer Check
Sie haben events nach Monaten anhand von ts partitioniert. Welche Abfrage profitiert von Partition Pruning?
Lerne SQL mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 46
- Lektionen
- 183
Häufig gestellte Fragen
Ist die Lektion „Effiziente Abfragen über Partitionen hinweg“ kostenlos?
Ja — der vollständige Text von „Effiziente Abfragen über Partitionen hinweg“ 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 „Effiziente Abfragen über Partitionen hinweg“?
Schreiben Sie Abfragen, die vom Partition Pruning profitieren, und überprüfen Sie das Pruning mit EXPLAIN. 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 „Effiziente Abfragen über Partitionen hinweg“?
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
- Warum partitionieren: Pruning und Wartung
- Bereichs-, Listen- und Hash-Partitionierung
- Partitionen abtrennen und anhängen
- Effiziente Abfragen über Partitionen hinweg