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

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:
# 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/RHELInnoDB-Optimierung
InnoDB ist die Standard-Speicher-Engine von MySQL. Optimieren Sie sie für bessere Leistung:
# 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 = 2Abfrage-Cache-Konfiguration
Der Abfrage-Cache kann die Leistung für leseintensive Workloads verbessern (Hinweis: Der Abfrage-Cache ist in MySQL 8.0 veraltet):
# 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:
# 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
# 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