⚡ 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
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 |
🎯 5. Aufgaben & Checkliste in aufgabe.sql
Öffne die Datei aufgabe.sql und implementiere die 4 Aufgaben: