MySQL ermittelt den besten Ausführungsweg für eine Anfrage mit einem kostenorientierten Optimierer. In vielen Fällen kann MySQL den bestmöglichen Ausführungsplan berechnen, aber manchmal hat es nicht genügend Informationen über die Daten und muss „fundierte“ Annahmen über die Daten treffen.
Wenn MySQL einmal nicht das Richtige tun sollte, stehen folgende Tools als Hilfestellung zur Verfügung:
Die EXPLAIN
-Anweisung lässt erkennen, wie
MySQL eine Anfrage verarbeitet. Um sie zu benutzen, setzen Sie
einfach das Schlüsselwort EXPLAIN
vor Ihre
SELECT
-Anweisung:
mysql> EXPLAIN SELECT * FROM t1, t2 WHERE t1.i = t2.i;
EXPLAIN
wird in Abschnitt 7.2.1, „EXPLAIN
-Syntax (Informationen über ein
SELECT
erhalten)“,
genauer beschrieben.
Mit ANALYZE TABLE
können Sie die
Schlüsselverteilungen für die gescannte Tabelle
aktualisieren. Siehe auch Abschnitt 13.5.2.1, „tbl_name
ANALYZE TABLE
“.
Wenn Sie für die gescannte Tabelle die FORCE
INDEX
-Anweisung geben, teilen Sie MySQL dadurch mit,
dass Tabellenscans im Vergleich zur Verwendung des
vorgegebenen Indexes sehr aufwändig sind. Siehe
Abschnitt 13.2.7, „SELECT
“.
SELECT * FROM t1, t2 FORCE INDEX (index_for_column) WHERE t1.col_name=t2.col_name;
USE INDEX
und IGNORE
INDEX
können ebenfalls nützlich sein.
Globale und tabellenspezifische
STRAIGHT_JOIN
s. Siehe
Abschnitt 13.2.7, „SELECT
“.
Sie können auch globale oder Thread-spezifische
Systemvariablen einstellen, zum Beispiel indem Sie
mysqld mit der Option
--max-seeks-for-key=1000
starten oder dem
Optimierer mit SET max_seeks_for_key=1000
sagen, dass er davon ausgehen soll, dass kein Schlüsselscan
mehr als 1.000 Schlüsselsuchoperationen bedeutet. Siehe
Abschnitt 5.2.2, „Server-Systemvariablen“.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.