Datenbank-Indizes, erklärt mit einem Telefonbuch
Jede langsame Abfrage, die ich je repariert habe, lief auf dasselbe Bild hinaus. Man fragt MySQL nach WHERE email = 'omar@example.com', und ohne Index kann die Datenbank nur eines tun:
Was ein Index eigentlich ist
Ein Index ist eine zweite, sortierte Struktur neben deiner Tabelle: ein B-Baum. Sortierte Dinge lassen sich durch Halbieren durchsuchen, also macht die Datenbank Sprünge, keine Schritte. Dieselbe Abfrage, mit einem Index auf email:
Wann man einen Index hinzufügt
- Spalten in
WHERE,JOIN ... ONundORDER BYdeiner häufigen Abfragen. - Fremdschlüssel, immer.
- Nicht auf Spalten, nach denen fast nie gefiltert wird: jeder Index verlangsamt Schreibvorgänge ein wenig.
EXPLAIN auf der Abfrage aus. Siehst du type: ALL, ist das die erste Skizze: ein voller Scan. Mit dem richtigen Index wird daraus ref oder range, die zweite Skizze.Die 20%-Performance-Verbesserung, die ich bei Getmayes geliefert habe, war größtenteils genau das: EXPLAIN-Ausgaben lesen, den Baum zeichnen, und die vier Indizes hinzufügen, die die Abfragen die ganze Zeit gebraucht hatten.
Notizen der Leser