💎 Lehrpfad 4: Performance, Transaktionen & Master

SQL 13: B-Tree Indizes & Query-Optimierung

Optimiere Datenbank-Performance von O(N) auf O(log N): B-Tree Indizes, zusammengesetzte (Composite) Indizes, Partial Indizes und Abfrageplan-Analyse mit EXPLAIN QUERY PLAN.

📂 Dateien dieser Lerneinheit:
📄 aufgabe.sql (Startercode) 🧪 test_aufgabe.sql (Testsuite) 💡 musterloesung.sql (Lösung) 📖 README.md

⚡ 1. Wie Indizes Abfragen beschleunigen

Ohne Index muss die Datenbank bei jedem WHERE-Filter jede einzelne Zeile auf der Festplatte lesen (Full Table Scan: O(N)). Ein B-Tree Index ist ein balancierter Baum sortierter Zeiger, der die Suche auf O(log N) Lesezugriffe reduziert:

-- 🎯 1. Standard B-Tree Index:
CREATE INDEX idx_kunden_stadt ON kunden(stadt);

-- 🎯 2. Zusammengesetzter (Composite) Index:
CREATE INDEX idx_artikel_kat_preis ON artikel(kategorie_id, preis DESC);

-- 🎯 3. Partieller Index (Speichereffizient nur für Teilmengen):
CREATE INDEX idx_kunden_aktive ON kunden(registriert_am) WHERE status = 'aktiv';

🔍 2. Abfragepläne analysieren & SARGability

Mit EXPLAIN QUERY PLAN zeigt die Datenbank-Engine ihre interne Ausführungsstrategie:

🛑 SCAN TABLE (Langsam!)

Sequentieller Full Table Scan aller Zeilen. Tritt auf bei fehlenden Indizes oder Non-SARGable Abfragen wie WHERE strftime('%Y', datum) = '2024'.

⚡ SEARCH TABLE USING INDEX (Schnell!)

Gezielter binärer B-Tree Einstieg. Bei SARGable Range Queries: WHERE datum >= '2024-01-01' AND datum < '2025-01-01'.

-- Abfrageplan inspizieren:
EXPLAIN QUERY PLAN 
SELECT id, name, preis 
FROM artikel 
WHERE kategorie_id = 1 AND preis > 500;

🏭 3. Didaktische Analogie: Das Buchregister

📖 Der Sachbuch-Index

Table Scan: Du suchst im 1.000-seitigen SQL-Wälzer das Wort "Window Function", indem du jede Seite von 1 bis 1.000 Zeile für Zeile durchliest.

B-Tree Index: Du schlägst hinten das alphabetische Register (Index) bei "W" auf und findest direkt: "Seite 412".

📑 4. Cheat-Sheet: Indexierung & Performance

Befehl / Konzept Syntax Vorteil
UNIQUE INDEX CREATE UNIQUE INDEX idx_u ON tab(col) Erzwingt Eindeutigkeit & beschleunigt WHERE col = ...
Composite Index CREATE INDEX idx_c ON tab(a, b) Beschleunigt Filter auf (a) und auf (a, b)
Partial Index CREATE INDEX idx_p ON tab(col) WHERE cond Spart bis zu 90% RAM & Disk-Speicher
EXPLAIN QUERY PLAN EXPLAIN QUERY PLAN SELECT ... Prüft, ob der Query Optimizer Indizes verwendet

🧠 Diagnostischer Selbst-Check

Überprüfe dein Verständnis der Kernkonzepte und typischen Denkfallen, bevor du den Code in der Web-IDE schreibst.

🎯 5. Aufgaben & Checkliste in aufgabe.sql

Öffne die Datei aufgabe.sql und implementiere die 4 Aufgaben:

💻 In Web-IDE öffnen & lösen →