| .. | ||
| aufgabe.sql | ||
| index.html | ||
| musterloesung.sql | ||
| README.md | ||
| test_aufgabe.sql | ||
SQL 13: B-Tree Indizes & Query-Optimierung ⚡🔍
Willkommen zu Modul 13 (Lehrpfad 4: Performance, Transaktionen & Analytics Master)! Als Data Engineer und SQL-Architekt ist Performance deine wichtigste Währung. In diesem Modul lernst du, wie der Query Optimizer von relationalen Datenbanken arbeitet und wie du mit gezielten B-Tree Indizes Abfragezeiten von Sekunden auf Millisekunden senkst.
🎯 Lernziele
- B-Tree Indizes: Erstellen von Single-, Multi-Column- und Unique-Indizes.
- Leftmost-Prefix Regel: Verstehen, wie Composite Indizes (
col_a, col_b) funktionieren und wann sie greifen. - Partial Indizes: Ressourcenschonende Indizes mit
WHERE-Bedingung für Hot-Data. EXPLAIN QUERY PLAN: Analysieren und Interpretieren von Ausführungsplänen (SCAN TABLEvs.SEARCH TABLE USING INDEX).- SARGability: Schreiben indexfreundlicher Filterbedingungen ohne Funktionsaufrufe auf indexierten Spalten.
💡 Was bedeutet SARGable?
SARGable steht für Search Argument Able.
Wenn du in der WHERE-Bedingung eine Funktion auf die indexierte Spalte anwendest, kann die Datenbank den B-Tree Index nicht nutzen und muss einen langsamen Table Scan durchführen:
-- ❌ NON-SARGABLE (Index auf 'bestell_datum' wird ignoriert -> SCAN TABLE):
SELECT * FROM bestellungen WHERE strftime('%Y', bestell_datum) = '2024';
-- ✅ SARGABLE (Index wird direkt genutzt -> SEARCH TABLE USING INDEX):
SELECT * FROM bestellungen WHERE bestell_datum >= '2024-01-01' AND bestell_datum < '2025-01-01';
🚀 Aufgabenstellung (aufgabe.sql)
- TODO 1: Unique & Composite Indizes – Erstelle Indizes auf
kunden(email)undartikel(kategorie_id, preis DESC). - TODO 2: Partieller Index – Erstelle einen Index für aktive Kunden (
WHERE status = 'aktiv'). - TODO 3: Abfrageplan-Analyse – Führe
EXPLAIN QUERY PLANfür Schlüsselabfragen aus. - TODO 4: SARGable Refactoring – Optimiere eine Zeitbereichs-Abfrage zur vollen Ausnutzung des Datums-Index.
🧪 Tests ausführen
Validierung erfolgt über test_aufgabe.sql.