Eine langsame SQL-Abfrage kann die gesamte Anwendung lahmlegen. EXPLAIN ANALYZE ist Ihr bester Freund fuer die Optimierung.
EXPLAIN ANALYZE¶
EXPLAIN ANALYZE SELECT u.name, COUNT(o.id) as order_count FROM users u LEFT JOIN orders o ON u.id = o.user_id WHERE u.created_at > ‘2024-01-01’ GROUP BY u.name ORDER BY order_count DESC LIMIT 10; – Seq Scan = schlecht (Full Table Scan) – Index Scan = gut – Bitmap Index Scan = OK fuer groessere Ergebnisse
Indizes¶
– B-tree (Standard) – Gleichheit, Bereich CREATE INDEX idx_users_email ON users(email); – Composite Index – Spaltenreihenfolge ist wichtig! CREATE INDEX idx_orders_user_date ON orders(user_id, created_at DESC); – Partial Index – nur Teilmenge der Daten CREATE INDEX idx_active_users ON users(email) WHERE active = true; – GIN Index – JSONB, Volltextsuche CREATE INDEX idx_data ON products USING GIN(metadata);
Anti-Patterns¶
- SELECT * (laedt unnoetige Spalten)
- N+1 Problem (siehe separaten Artikel)
- LIKE ‘%term%’ (kann keinen Index nutzen)
- Funktionen auf indizierten Spalten WHERE YEAR(created_at) = 2024
- Fehlende LIMIT bei grossen Tabellen
Wichtigste Erkenntnis¶
Immer EXPLAIN ANALYZE verwenden. Richtige Indizes, kein SELECT *, Composite-Indizes in der richtigen Reihenfolge.