MWCodebymw.de ↗
SQL

Warum ist die Abfrage langsam? EXPLAIN QUERY PLAN und der richtige Index

Wenn eine SQL-Abfrage kriecht, liegt es fast immer an einem fehlenden Index – die Datenbank liest dann die ganze Tabelle durch. Mit EXPLAIN QUERY PLAN siehst du das schwarz auf weiß, und ein Index macht aus SCAN ein schnelles SEARCH.

Eine Abfrage, die bei 100 Zeilen schnell war, wird bei 100.000 Zeilen plötzlich träge. Der Grund ist meistens derselbe: Es fehlt ein Index, und die Datenbank muss die ganze Tabelle durchlesen, um deine Zeilen zu finden. Das Schöne: SQLite verrät dir das selbst.

Sichtbar machen mit EXPLAIN QUERY PLAN

Stell deiner Abfrage einfach EXPLAIN QUERY PLAN voran:

EXPLAIN QUERY PLAN
SELECT * FROM orders WHERE email = 'kunde@example.com';

Steht in der Ausgabe SCAN TABLE orders, liest die Datenbank jede einzelne Zeile – das ist der langsame Fall.

Den Index anlegen

CREATE INDEX idx_orders_email ON orders(email);

Jetzt dieselbe Abfrage noch einmal mit EXPLAIN QUERY PLAN prüfen. Aus dem SCAN wird nun:

SEARCH orders USING INDEX idx_orders_email (email=?)

SEARCH statt SCAN heißt: Die Datenbank springt direkt zu den passenden Zeilen, statt alles durchzugehen. Bei großen Tabellen ist das der Unterschied zwischen Millisekunden und Sekunden.

Die zwei Merksätze

  • Indexiere die Spalten, nach denen du filterst oder sortierst – also alles, was hinter WHERE, JOIN … ON und ORDER BY steht.
  • Nicht blind alles indexieren. Jeder Index kostet beim Schreiben (INSERT/UPDATE) etwas Zeit und Speicher. Leg Indizes gezielt dort an, wo eine Abfrage nachweislich langsam ist – und prüf den Effekt wieder mit EXPLAIN QUERY PLAN.

Performance-Themen wie dieses tauchen bei jeder wachsenden App auf. Wenn deine Anwendung langsam geworden ist und du nicht weißt, warum, schau ich mir das gern an – bymw.de.

Quellen

#SQLite#Index#EXPLAIN#Performance#Query

Du brauchst mehr als ein Snippet?

Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.

Projekt anfragen →