Zurück zum Blog
Januar 27, 2026Anleitungen

Wie man MySQL-Leistung optimiert

Vollständige Anleitung zur Optimierung der MySQL-Datenbankleistung: Konfigurationsoptimierung, Abfrageoptimierung, Indizierung und Überwachung.

Wie man MySQL-Leistung optimiert

Die Optimierung der MySQL-Leistung ist entscheidend für Anwendungen, die große Datenmengen oder hohen Datenverkehr verarbeiten. Diese Anleitung behandelt wesentliche Techniken zur Verbesserung der MySQL-Leistung, von der Konfigurationsoptimierung bis zur Abfrageoptimierung.

MySQL-Konfiguration optimieren

Bearbeiten Sie die MySQL-Konfigurationsdatei, um die Leistung basierend auf den Ressourcen Ihres Servers zu optimieren:

bash
# MySQL-Konfiguration bearbeiten (Ubuntu/Debian)
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

# MySQL-Konfiguration bearbeiten (CentOS/RHEL)
sudo nano /etc/my.cnf

# Diese Einstellungen hinzufügen oder ändern:
[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
max_connections = 200
query_cache_size = 64M
query_cache_type = 1
tmp_table_size = 64M
max_heap_table_size = 64M

# MySQL neu starten
sudo systemctl restart mysql  # Ubuntu/Debian
sudo systemctl restart mysqld   # CentOS/RHEL

InnoDB-Optimierung

InnoDB ist die Standard-Speicher-Engine von MySQL. Optimieren Sie sie für bessere Leistung:

bash
# In /etc/mysql/mysql.conf.d/mysqld.cnf oder /etc/my.cnf
[mysqld]
# InnoDB-Pufferpool (70-80% des verfügbaren RAM verwenden)
innodb_buffer_pool_size = 2G

# InnoDB-Protokolldateigröße
innodb_log_file_size = 512M

# InnoDB-Flush-Methode (für SSD)
innodb_flush_method = O_DIRECT

# InnoDB-I/O-Threads
innodb_read_io_threads = 4
innodb_write_io_threads = 4

# InnoDB-Protokoll-Flush bei Transaktions-Commit
innodb_flush_log_at_trx_commit = 2

Abfrage-Cache-Konfiguration

Der Abfrage-Cache kann die Leistung für leseintensive Workloads verbessern (Hinweis: Der Abfrage-Cache ist in MySQL 8.0 veraltet):

bash
# Für MySQL 5.7 und älter
[mysqld]
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 2M

# Abfrage-Cache-Status überprüfen
mysql> SHOW VARIABLES LIKE 'query_cache%';

# Abfrage-Cache-Statistiken überprüfen
mysql> SHOW STATUS LIKE 'Qcache%';

Index-Optimierung

Eine ordnungsgemäße Indizierung ist entscheidend für die Abfrageleistung:

bash
# Tabelle analysieren, um Index-Statistiken zu aktualisieren
ANALYZE TABLE table_name;

# Nicht verwendete Indizes überprüfen
SELECT * FROM sys.schema_unused_indexes;

# Index erstellen
CREATE INDEX idx_column ON table_name(column_name);

# Zusammengesetzten Index erstellen
CREATE INDEX idx_multi ON table_name(col1, col2, col3);

# Indizes anzeigen
SHOW INDEXES FROM table_name;

# Nicht verwendeten Index löschen
DROP INDEX idx_name ON table_name;

Abfrageoptimierung

Optimieren Sie Ihre SQL-Abfragen für bessere Leistung:

  • Verwenden Sie EXPLAIN, um Abfrageausführungspläne zu analysieren: EXPLAIN SELECT * FROM table WHERE column = 'value'
  • Vermeiden Sie SELECT * - wählen Sie nur benötigte Spalten aus
  • Verwenden Sie LIMIT, um Ergebnismengen einzuschränken
  • Verwenden Sie ordnungsgemäße WHERE-Klauseln mit indizierten Spalten
  • Vermeiden Sie Funktionen in WHERE-Klauseln (z. B. WHERE YEAR(date) = 2026 → WHERE date >= '2026-01-01')
  • Verwenden Sie JOINs statt Unterabfragen, wenn möglich
  • Verwenden Sie UNION statt OR für mehrere Bedingungen, wenn angemessen

MySQL-Leistung überwachen

bash
# MySQL-Status überprüfen
mysql> SHOW STATUS;

# Langsame Abfragen überprüfen
mysql> SHOW VARIABLES LIKE 'slow_query%';

# Langsame Abfrage-Protokoll aktivieren
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;

# Prozessliste überprüfen
mysql> SHOW PROCESSLIST;

# Tabellenstatus überprüfen
mysql> SHOW TABLE STATUS LIKE 'table_name';

# InnoDB-Status überprüfen
mysql> SHOW ENGINE INNODB STATUS;

Leistungsoptimierungs-Tipps

  • Führen Sie regelmäßig OPTIMIZE TABLE aus, um Tabellen zu defragmentieren
  • Überwachen Sie das Protokoll langsamer Abfragen und optimieren Sie langsame Abfragen
  • Verwenden Sie Verbindungspooling, um Verbindungsaufwand zu reduzieren
  • Partitionieren Sie große Tabellen nach Datum oder Bereich für bessere Leistung
  • Verwenden Sie Lese-Replikate für leseintensive Workloads
  • Halten Sie MySQL auf dem neuesten stabilen Release
  • Überwachen Sie die Festplatten-I/O und erwägen Sie die Verwendung von SSD/NVMe-Speicher
  • Verwenden Sie EXPLAIN ANALYZE (MySQL 8.0+) für detaillierte Abfrageanalyse