Richtige Indizes sind entscheidend für die Datenbankleistung.
Typen¶
- B-tree — Standard, Equality + Range
- Hash — nur Equality
- GIN — Volltext, JSONB, Arrays
- GiST — Geometrie, Range
- BRIN — große Tabellen mit natürlicher Sortierung
Beispiele¶
CREATE INDEX idx_email ON users (email);
CREATE INDEX CONCURRENTLY idx_date ON orders (created_at);
CREATE INDEX idx_composite ON orders (user_id, created_at DESC);
CREATE INDEX idx_partial ON orders (created_at) WHERE status='pending';
CREATE INDEX idx_expr ON users (lower(email));
CREATE INDEX idx_gin ON events USING GIN (data);
Analyse¶
SELECT indexrelname, idx_scan, pg_size_pretty(pg_relation_size(indexrelid))
FROM pg_stat_user_indexes WHERE idx_scan=0;
- WHERE-, JOIN-, ORDER-BY-Spalten
- Selektivste zuerst
- Partial für Teilmengen
- CONCURRENTLY in Produktion
Richtige Indizes = Leistung¶
EXPLAIN ANALYZE und gezielte Indizes.
postgresqlIndizesperformance