Abfragekosten Sequential Scan
Geschätzte Kosten eines vollständigen Tabellen-Scans: Kosten = Seiten · SeqSeitenKosten. SeqSeitenKosten typischerweise 1,0 in Kostenmodellen wie PostgreSQL.
Abfragekosten Sequential Scan berechnen
Geschätzte Kosten eines vollständigen Tabellen-Scans: Kosten = Seiten · SeqSeitenKosten. SeqSeitenKosten typischerweise 1,0 in Kostenmodellen wie PostgreSQL.
- Kosten — Gesamtkosten
- Seiten — Seitenanzahl
- SeqSeitenKosten — Kosten pro Seite
Worum geht es?
Ein Sequential Scan liest die Heap-Datei einer Tabelle Seite für Seite linear vom Anfang bis zum Ende. Die Kosten skalieren entsprechend linear mit der Anzahl Seiten und einer konstanten Bewertung pro Seite — in PostgreSQLs Kostenmodell ist seq_page_cost als Referenzwert 1,0 normiert.
Die Formel ist der Anker, gegen den der Optimizer alle anderen Pläne misst: solange ein Index-Scan teurer wäre als ein voller Tabellen-Scan, gewinnt der Sequential Scan — und das passiert bei selektiven Abfragen über einen großen Anteil der Tabelle erstaunlich oft.
Die Formel
Kosten = Seiten · SeqSeitenKosten
Umstellungen:
Seiten = Kosten / SeqSeitenKosten
SeqSeitenKosten = Kosten / SeitenDie Variablen
| Symbol | Bedeutung | Einheit | Erklärung |
|---|---|---|---|
| Seiten | Seitenanzahl | — | Anzahl Datenseiten der Tabelle. |
| SeqSeitenKosten | Kosten pro Seite | — | I/O-Kosten pro sequentiell gelesener Seite. |
| Kosten | Gesamtkosten | — | Geschätzte Abfragekosten. |
Minimal-Beispiel
Eine Tabelle belegt 10.000 Seiten, seq_page_cost = 1,0:
Kosten = 10 000 · 1,0
= 10 000Praxis-Beispiele
Beispiel 1 — Heap-Größe in Seiten umrechnen
Tabelle mit 2 GB bei 8-KiB-Seiten:
Seiten = 2 · 10⁹ / 8 192
≈ 244 140
Kosten = 244 140 · 1,0
≈ 244 140Beispiel 2 — Schnellere SSDs modellieren
Auf NVMe ist sequentielles I/O ca. 4× günstiger als der Default. Setze seq_page_cost = 0,25:
Kosten = 244 140 · 0,25
≈ 61 035Beispiel 3 — Wann lohnt sich der Index nicht mehr?
Eine 100.000-Seiten-Tabelle, Sequential-Scan-Kosten = 100.000. Ein hypothetischer Index-Scan würde 60 % der Tabelle treffen und ca. 200.000 Random-I/Os à 4,0 kosten:
SeqScan-Kosten = 100 000 · 1,0 = 100 000
IndexScan-Kosten ≈ 200 000 · 4,0 = 800 000
Optimizer wählt Sequential Scan.