Bei einer langsamen MySQL-Abfrage sollten Sie zunächst ihre Aufgabe, Parameter und Datenmenge festhalten. Untersuchen Sie anschließend den Ausführungsplan und die im Betrieb beobachtete Last. Einzelne gemessene Abfragen sind eine bessere Grundlage für Änderungen als allgemeine Empfehlungen für jede Tabelle.
Mit EXPLAIN beginnen
Das Beispiel setzt eine vorhandene Tabelle benutzer mit einem Feld name voraus. EXPLAIN zeigt den geplanten Ablauf der Suche. Prüfen Sie, welche Indizes infrage kommen und wie viele Zeilen der Planer voraussichtlich untersuchen muss.
-- Verwendung von EXPLAIN, um den Ausführungsplan einer Abfrage zu analysieren
EXPLAIN SELECT * FROM benutzer WHERE name = 'Max Mustermann';
Indizes passend auswählen
Wenn ein geeigneter Index fehlt, kann der folgende Ausdruck ein Ausgangspunkt sein. Prüfen Sie zuvor die vorhandenen Indizes und Bedingungen; ein doppelter Index kann unnötige Arbeit verursachen.
-- Erstellung eines Indexes für die Spalte `name` in der Tabelle `benutzer`
CREATE INDEX idx_name ON benutzer(name);
Ob der Index nützlich ist, hängt von Auswahl, Datenverteilung und weiteren Abfragen ab. Berücksichtigen Sie auch Schreibzugriffe, weil Indizes bei Änderungen gepflegt werden. Vergleichen Sie den Plan und die Laufzeit nach der Änderung mit derselben fachlichen Aufgabe.
Messdaten mit dem Performance Schema ergänzen
Das Performance Schema kann Ereignisse und zusammengefasste Messwerte bereitstellen. Die Grundaktivierung erfolgt beim Serverstart; sie lässt sich nicht mit SET GLOBAL performance_schema zur Laufzeit einschalten. Welche Instrumente Daten sammeln, hängt zusätzlich von der Konfiguration ab.
Prüfen Sie die Einstellungen anhand der Dokumentation Ihrer MySQL-Version und des vorhandenen Betriebsmodells. Leere Messdaten können eine fehlende Erfassung bedeuten und sind kein Nachweis, dass keine Last vorliegt. Beschränken Sie den Zugriff auf Diagnosedaten, wenn Abfragen vertrauliche Informationen enthalten.
Änderungen nachvollziehbar dokumentieren
Halten Sie Ausgangsbefund, geplante Maßnahme und Vergleich fest. Testen Sie häufige sowie seltene Parameter und die Auswirkungen auf andere Zugriffe. So bleibt eine Optimierung überprüfbar, auch wenn Tabellen und Nutzung später wachsen.
Weiterführende Dokumentation: MySQL: Performance Schema System Variables.