Indexe richtig setzen – warum EXPLAIN dein bester Freund ist
Es ist fast immer ein Index. Wenn eine Abfrage langsam ist, wenn die Seite
hängt, wenn der Datenbankserver unter Last stöhnt – neun von zehn Mal
ist es ein fehlender oder falsch gesetzter Index. Das andere Mal ist es
ein SELECT * auf einer Tabelle mit 2 Millionen Zeilen.
Manchmal beides gleichzeitig.
Was EXPLAIN dir zeigt
EXPLAIN vor jede Abfrage setzen die langsam ist. Das Ergebnis
zeigt wie MySQL die Abfrage ausführt – welche Tabellen in welcher Reihenfolge
gelesen werden, ob ein Index benutzt wird, und wieviele Zeilen die Engine
schätzungsweise scannen muss.
Welche Indexe wann
Einzelner Index auf Spalten die häufig in WHERE-Klauseln auftauchen. Zusammengesetzter Index wenn immer die gleiche Kombination abgefragt wird – die Reihenfolge dabei ist wichtig: selektivste Spalte zuerst, dann die Einschränkungsspalte. Foreign Keys brauchen fast immer einen Index auf der referenzierenden Seite – MySQL legt den nicht automatisch an.
Was man lassen sollte: Indexe auf Spalten die wenige verschiedene Werte haben (boolean, status mit 3 Werten) – der Optimizer ignoriert die meistens sowieso. Und zu viele Indexe auf write-heavy Tables – jeder Index kostet bei INSERT und UPDATE Zeit.
EXPLAIN ANALYZE für tiefere Analyse
Wer das einmal verinnerlicht hat, benutzt EXPLAIN reflexartig
bevor jede neue Abfrage in Produktion geht. Das spart mehr Zeit als
jedes andere Datenbankoptimierungs-Tool.
← zurück zu Datenbanken 📂 Archiv