Thu, Jul 16 Mittagsausgabe Deutsch
Faktspur Faktspur Morgenbericht
Aktualisiert 16:23 16 Artikel heute
Blog Lokal Politik Technik Welt Wirtschaft

Langsame MySQL-Abfragen beheben: So optimieren Sie Ihre Queries

Lukas Felix Bauer Koch • 2026-05-09 • Gepruft von Oliver Weber

Wenn Ihre MySQL-Datenbank plötzlich träge reagiert und Abfragen Sekunden statt Millisekunden dauern, sind Sie nicht allein. Fast jeder, der mit Datenbanken arbeitet, kennt das Gefühl, wenn ein Dashboard endlos lädt.

  1. Slow Query Log aktivieren und konfigurieren
  2. Langsame Abfragen im Log identifizieren
  3. Mit EXPLAIN die Ursache analysieren
  4. Indizes optimieren oder Abfragen umschreiben
  5. Performance Schema für tiefere Einblicke nutzen

Langsame Abfragen pro Tag (typische Produktion): 5–10 % der Gesamtabfragen ·
Durchschnittliche Latenz langsamer Abfragen: 2,4 Sekunden ·
Häufigste Ursache: Fehlender Index (ca. 70 %) ·
Empfohlener Schwellwert (long_query_time): 2 Sekunden

Kurzüberblick

1Bestätigte Fakten
2Was unklar ist
  • Die optimale long_query_time hängt von der Anwendungslast ab
  • Ob das Aktivieren des Slow Query Log die Performance messbar beeinträchtigt, variiert je nach System
  • Nicht alle langsamen Abfragen sind automatisch optimierungsbedürftig – manche sind durch Datenvolumen bedingt
3Zeitleisten-Signal
4Wie es weitergeht
  • Performance Schema liefert noch tiefere Metriken für wiederkehrende Optimierungen (Percona Blog (Datenbank-Experten))
  • Automatisierte Überwachung mit Percona Monitoring and Management (PMM) empfohlen (Percona Blog (Datenbank-Experten))

Im Folgenden finden Sie die wichtigsten Kennzahlen und Befehle auf einen Blick.

Wichtige Kennzahlen und Befehle im Überblick
Kennzahl / Befehl Wert / Beschreibung
Standardwert long_query_time 10 Sekunden (MySQL Dokumentation (Offizielles Handbuch))
Befehl zum Aktivieren des Slow Query Log SET GLOBAL slow_query_log = ON; (AlexHost (Hosting-Dokumentation))
Langsamste Abfragen anzeigen SELECT * FROM mysql.slow_log ORDER BY query_time DESC LIMIT 10;
EXPLAIN type = ALL Full Table Scan – möglichst vermeiden (Percona Blog (Datenbank-Experten))
Empfohlener Schwellwert (Produktion) 2 Sekunden (AlexHost (Hosting-Dokumentation))
Anteil langsamer Abfragen (typisch) 5–10 % aller Abfragen

Wie kann ich MySQL-Abfragen beschleunigen?

Die Quintessenz

Die größte Hebelwirkung hat die Index-Optimierung: Rund 70 % aller langsamen Abfragen sind auf fehlende oder falsche Indizes zurückzuführen. Wer zuerst die Indizes prüft, spart sich stundenlanges Feintuning an der Konfiguration.

Indizes optimieren

  • Indizes auf WHERE-Klausel-Spalten erstellen, beginnend mit der selektivsten Spalte (Percona Blog (Datenbank-Experten))
  • Composite-Indizes: sortierte Spalten (ORDER BY) am Ende platzieren (Percona Blog (Datenbank-Experten))
  • EXPLAIN zeigt sofort, ob Indizes genutzt werden oder ein Full Table Scan stattfindet (Percona Blog (Datenbank-Experten))

Query-Struktur verbessern

  • Vermeiden Sie SELECT * – fragen Sie nur die benötigten Spalten ab
  • Nutzen Sie EXPLAIN vor jeder komplexen Abfrage, um den Ausführungsplan zu prüfen (dev.to – DrupalAdmin (Praxisbericht))
  • Setzen Sie LIMIT bei großen Ergebnismengen

Server-Konfiguration anpassen

  • Erhöhen Sie max_execution_time für einzelne Sitzungen: SET SESSION max_execution_time = 5000; (Tech-Now.io (IT-Support-Ratgeber))
  • Prüfen Sie Puffergrößen wie innodb_buffer_pool_size (empfohlen: 70–80 % des Arbeitsspeichers)
Fazit: Der schnellste Weg zu schnelleren Abfragen führt über die Index-Optimierung. Entwickler, die regelmäßig EXPLAIN nutzen, finden Fehler in Minuten. Datenbank-Administratoren sollten zusätzlich die Puffergrößen anpassen.

Die Konsequenz: Wer Indizes priorisiert, reduziert die Latenz drastisch.

Wie überprüfe ich die Leistung von MySQL-Abfragen?

Slow Query Log aktivieren

  • Aktivieren Sie das Log mit SET GLOBAL slow_query_log = ON; (AlexHost (Hosting-Dokumentation))
  • Setzen Sie den Schwellwert: SET GLOBAL long_query_time = 2; (empfohlen für Produktion) (AlexHost (Hosting-Dokumentation))
  • Standardpfad der Logdatei: /var/log/mysql/slow-query.log (AlexHost (Hosting-Dokumentation))

Performance Schema nutzen

  • Aktivieren Sie performance_schema=ON in der my.cnf (MySQL Dokumentation (Offizielles Handbuch))
  • Top-Abfragen nach Latenz finden: SELECT * FROM performance_schema.events_statements_summary_by_digest ORDER BY sum_timer_wait DESC LIMIT 10;
  • Percona Monitoring and Management (PMM) visualisiert diese Daten direkt (Percona Blog (Datenbank-Experten))

EXPLAIN verwenden

  • Hängen Sie EXPLAIN vor Ihre SELECT-Abfrage: EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';
  • Prüfen Sie die Spalte type: ALL bedeutet Full Table Scan und ist ein Alarmzeichen (Percona Blog (Datenbank-Experten))
  • Mit EXPLAIN ANALYZE erhalten Sie tatsächliche Ausführungszeiten statt Schätzungen (MySQL Dokumentation (Offizielles Handbuch))

Der Trick: Kombinieren Sie alle drei Methoden. Das Slow Query Log zeigt Ihnen welche Abfragen langsam sind, EXPLAIN erklärt warum, und das Performance Schema liefert die Metriken, um Prioritäten zu setzen.

Wie finde ich heraus, welche Abfrage in MySQL lange dauert?

Slow Query Log auswerten

  • Standardwert long_query_time ist 10 Sekunden – senken Sie ihn auf 2 Sekunden (AlexHost (Hosting-Dokumentation))
  • Nutzen Sie mysqldumpslow zur Aggregation: mysqldumpslow -s t /var/log/mysql/slow-query.log
  • Für tiefere Analysen: pt-query-digest aus der Percona Toolkit Suite (Percona Blog (Datenbank-Experten))

Performance Schema Statements suchen

  • Die Tabelle events_statements_summary_by_digest speichert aggregierte Abfragezeiten (MySQL Dokumentation (Offizielles Handbuch))
  • Filtern Sie nach SUM_TIMER_WAIT und sortieren absteigend
  • I/O- und Lock-Statistiken liefern die events_waits_summary_global_by_event_name-Tabelle

SHOW PROCESSLIST nutzen

  • Mit SHOW FULL PROCESSLIST; sehen Sie alle aktuell laufenden Abfragen in Echtzeit (Tech-Now.io (IT-Support-Ratgeber))
  • Achten Sie auf Abfragen mit Time > 2 Sekunden und dem Status Sending data oder Creating sort index
Was zu beachten ist

SHOW PROCESSLIST zeigt nur den aktuellen Moment. Für eine systematische Analyse müssen Sie das Slow Query Log oder das Performance Schema über einen längeren Zeitraum laufen lassen.

Die Konsequenz: Nur eine kontinuierliche Überwachung deckt alle Engpässe auf.

Wie analysiere ich eine langsame MySQL-Abfrage mit EXPLAIN?

EXPLAIN Ausgabe verstehen

  • Die Spalte type gibt die Zugriffsart an: ALL (Full Scan), range, ref, eq_ref, const – von langsam zu schnell (MySQL Dokumentation (Offizielles Handbuch))
  • rows zeigt die geschätzte Anzahl zu durchsuchender Zeilen
  • Extra = Using temporary bedeutet, dass eine temporäre Tabelle erstellt wird – oft ein Zeichen für fehlende Indizes (Percona Blog (Datenbank-Experten))

Typische Probleme erkennen

  • type = ALL: Full Table Scan – sofort einen Index auf die WHERE-Spalte legen
  • Using filesort bedeutet, dass MySQL die Ergebnismenge selbst sortieren muss – ein Composite-Index mit der ORDER-BY-Spalte hilft (Percona Blog (Datenbank-Experten))
  • Using index ist dagegen ein gutes Zeichen – der Index deckt die Abfrage vollständig ab

EXPLAIN ANALYZE für genaue Zeiten

  • Seit MySQL 8.0.18: EXPLAIN ANALYZE SELECT ... zeigt tatsächliche Ausführungszeit und Zeilenanzahl pro Schritt (MySQL Dokumentation (Offizielles Handbuch))
  • Das ist wertvoller als die Schätzung von rows, weil es reale Messungen verwendet

Die Muster: Ein Full Table Scan (type=ALL) ist der häufigste Grund für langsame Abfragen. Sobald Sie einen sehen, setzen Sie einen Index auf die beteiligte WHERE-Spalte – oft sinkt die Latenz von Sekunden auf Millisekunden.

Wie konfiguriere ich das Slow Query Log in MySQL?

slow_query_log aktivieren

  • Global: SET GLOBAL slow_query_log = ON; (AlexHost (Hosting-Dokumentation))
  • Dauerhaft in my.cnf: slow_query_log = 1
  • Status prüfen: SHOW VARIABLES LIKE 'slow_query_log'; (AlexHost (Hosting-Dokumentation))

log_output festlegen

  • Standard: FILE – schreibt in eine Datei
  • Alternative: TABLE – schreibt in die mysql.slow_log-Tabelle (MySQL Dokumentation (Offizielles Handbuch))
  • Nachteil TABLE: erhöhte I/O-Last auf der Systemdatenbank

long_query_time setzen

  • Standardwert: 10 Sekunden – für die meisten Anwendungen zu hoch (MySQL Dokumentation (Offizielles Handbuch))
  • Empfehlung für Produktion: 2 Sekunden (AlexHost (Hosting-Dokumentation))
  • Befehl: SET GLOBAL long_query_time = 2;
Fazit: Aktivieren Sie das Slow Query Log für jede Produktionsdatenbank. Setzen Sie long_query_time = 2 und analysieren Sie die Ausgabe mit pt-query-digest. Das ist der erste Schritt zu jeder Optimierung.

Der nächste Schritt ist die Einrichtung automatischer Alarme bei Überschreitung der Schwellwerte.

Bestätigte Fakten

  • Slow Query Log ist standardmäßig deaktiviert (AlexHost (Hosting-Dokumentation))
  • EXPLAIN zeigt den Ausführungsplan einer Abfrage (Percona Blog (Datenbank-Experten))
  • Fehlende Indizes verlangsamen SELECT-Abfragen erheblich (dev.to – DrupalAdmin (Praxisbericht))

Was unklar ist

  • Die optimale long_query_time hängt von der Anwendungslast ab
  • Ob das Aktivieren des Slow Query Log die Performance messbar beeinträchtigt, variiert je nach System
  • Nicht alle langsamen Abfragen sind automatisch optimierungsbedürftig – manche sind durch Datenvolumen bedingt

Stimmen aus der Praxis

„Das Slow Query Log ist der erste und wichtigste Schritt, um langsame Abfragen zu identifizieren. Ohne Log tappen Sie im Dunkeln.”

– Percona Blog (Datenbank-Experten), 2025

„Die Parameter des Slow Query Log sind gut dokumentiert: long_query_time definiert, ab wann eine Abfrage als langsam gilt, und slow_query_log_file bestimmt den Speicherort.”

– MySQL Documentation (Offizielles Handbuch)

„In der Praxis sieht man oft, dass ein fehlender Index auf einer WHERE-Spalte eine Abfrage von 5 Sekunden auf 5 Millisekunden verkürzt – das ist kein Einzelfall.”

– dev.to – DrupalAdmin (Praxisbericht)

Was diese Stimmen eint: Die Werkzeuge sind da, sie sind gut dokumentiert, aber der entscheidende Schritt ist, sie konsequent einzusetzen. Wer das Slow Query Log aktiviert und die Ausgabe mit EXPLAIN abgleicht, findet die größten Performance-Bremsen in Minuten.

Verwandte Beiträge: MacBook Beschleunigen – Tipps für Intel & Apple Silicon · Was ist ein Browser? Definition, Funktion & Beispiele

Häufig gestellte Fragen

Was ist der Unterschied zwischen Slow Query Log und Performance Schema?

Das Slow Query Log schreibt langsame Abfragen in eine Datei oder Tabelle, sobald sie long_query_time überschreiten. Das Performance Schema sammelt dagegen detaillierte Metriken zu allen Abfragen (nicht nur langsamen) und speichert sie in internen Tabellen – es ist genauer, aber auch lastintensiver. Beide ergänzen sich.

Wie stelle ich long_query_time auf 2 Sekunden?

SET GLOBAL long_query_time = 2; (oder in der my.cnf: long_query_time = 2). Achten Sie darauf, dass der Wert für neue Verbindungen gilt – bestehende Sessions müssen Sie trennen und neu verbinden.

Kann das Slow Query Log die Datenbank verlangsamen?

Ja, insbesondere bei sehr hoher Schreiblast. Der Overhead ist aber gering, wenn Sie den Schwellwert sinnvoll (z. B. 2 Sekunden) wählen. In der Praxis ist der Nutzen größer als der Nachteil. Bei extrem frequentierten Systemen kann die Ausgabe auf TABLE jedoch zusätzliche I/O verursachen.

Wie lese ich die EXPLAIN-Ausgabe?

Konzentrieren Sie sich auf die Spalten type (je näher an const, desto besser), rows (geschätzte Zeilen) und Extra (Hinweise wie Using temporary oder Using filesort). Ein type=ALL ist ein klares Signal für einen fehlenden Index.

Was bedeutet ‘Using temporary’ in EXPLAIN?

MySQL muss eine temporäre Tabelle anlegen, um das Ergebnis zu berechnen – das passiert oft bei GROUP BY ohne passenden Index. Es ist ein Performance-Alarm: Fügen Sie einen Composite-Index hinzu, der sowohl die WHERE- als auch die GROUP-BY-Spalten abdeckt.

Ist es sicher, das Slow Query Log in der Produktion zu aktivieren?

Ja, es ist sicher, solange Sie den Speicherort überwachen und die Logrotation einrichten. Der Performance-Einfluss ist minimal (meist unter 1 % CPU), solange Sie long_query_time nicht auf 0 setzen. Vermeiden Sie in hochfrequentierten Systemen die Ausgabe auf TABLE.



Lukas Felix Bauer Koch

Uber den Autor

Lukas Felix Bauer Koch

Die Redaktion verbindet schnelle Updates mit klaren Einordnungen.