
Kapitel 6: MySQL-Optimierung 337
• F¨ur jeden Sub-Join wird ein einfacheres WHERE konstruiert, um eine schnelle WHERE-
Evaluierung f¨ur jeden Sub-Join zu erzielen, und auch, um Datens¨atze so bald wie
m¨oglich ¨uberspringen zu k¨onnen.
• Alle Konstanten-Tabellen werden zuerst gelesen, vor jeder anderen Tabelle in der An-
frage. Eine Konstanten-Tabelle ist:
− Eine leere Tabelle oder eine Tabelle mit 1 Zeile.
− Eine Tabelle, die bei einer WHERE-Klausel auf einen UNIQUE-Index oder einen
PRIMARY KEY benutzt wird, wobei alle Index-Teile mit konstanten Ausdr¨ucken
benutzt werden und die Index-Teile als NOT NULL definiert sind.
Alle folgenden Tabellen werden als Konstanten-Tabellen benutzt:
mysql> SELECT * FROM t WHERE primary_key=1;
mysql> SELECT * FROM t1,t2
WHERE t1.primary_key=1 AND t2.primary_key=t1.id;
• Die beste Join-Kombination, um Tabellen zu verkn¨upfen, wird gefunden, wenn man alle
M¨oglichkeiten probiert. Wenn alle Spalten in ORDER BY und in GROUP BY aus derselben
Tabelle stammen, wird diese Tabelle vorzugsweise vorn hingestellt, wenn verkn¨upft
wird.
• Wenn es eine ORDER BY-Klausel und eine andere GROUP BY-Klausel gibt, oder wenn
ORDER BY oder GROUP BY Spalten aus Tabellen enth¨alt, die nicht aus der ersten Tabelle
in der Join-Reihe stammen, wird eine tempor¨are Tabelle erzeugt.
• Wenn Sie SQL_SMALL_RESULT benutzen, benutzt MySQL eine tempor¨are Tabelle im
Arbeitsspeicher.
• Jeder Tabellen-Index wird a/jointfilesconvert/293675/bgefragt und der beste Index, der weniger als 30% der
Zeilen ¨uberspannt, wird benutzt. Wenn ein solcher Index nicht gefunden werden kann,
wird ein schneller Tabellenscan benutzt.
• In einigen F¨allen kann MySQL Zeilen vom Index lesen, ohne ¨uberhaupt in der Daten-
Datei nachzuschlagen. Wenn alle Spalten, die vom Index benutzt werden, numerisch
sind, wird nur der Index-Baum benutzt, um die Anfrage aufzul¨osen.
• Bevor jeder Datensatz herausgegeben wird, werden die, die nicht mit der HAVING-
Klausel ¨ubereinstimmen, ¨ubersprungen.
Einige Beispiele von Anfragen, die sehr schnell sind:
mysql> SELECT COUNT(*) FROM tabelle;
mysql> SELECT MIN(schluessel_teil1),MAX(schluessel_teil1) FROM tabelle;
mysql> SELECT MAX(schluessel_teil2) FROM tabelle
WHERE schluessel_teil_1=konstante;
mysql> SELECT ... FROM tabelle
ORDER BY schluessel_teil1,schluessel_teil2,... LIMIT 10;
mysql> SELECT ... FROM tabelle
ORDER BY schluessel_teil1 DESC,schluessel_teil2 DESC,... LIMIT 10;
Die folgenden Anfragen werden aufgel¨ost, indem nur der Index-Baum benutzt wird (unter
der Annahme, dass die indizierten Spalten numerisch sind):
mysql> SELECT schluessel_teil1,schluessel_teil2 FROM tabelle WHERE schluessel_teil1=val;
mysql> SELECT COUNT(*) FROM tabelle
Comentarios a estos manuales