
338 MySQL - Technische Referenz f¨ur Version 5.0.1-alpha
WHERE schluessel_teil1=val1 AND schluessel_teil2=val2;
mysql> SELECT schluessel_teil2 FROM tabelle GROUP BY schluessel_teil1;
Die folgenden Anfragen benutzen Indexierung, um die Zeilen in sortierter Reihenfolge
abzufragen, ohne einen separaten Sortierdurchgang:
mysql> SELECT ... FROM tabelle ORDER BY schluessel_teil1,schluessel_teil2,... ;
mysql> SELECT ... FROM tabelle ORDER BY schluessel_teil1 DESC,schluessel_teil2 DESC,... ;
6.2.5 Wie MySQL DISTINCT optimiert
DISTINCT wird f¨ur alle Spalten in GROUP BY umgewandelt, DISTINCT in Kombination mit
ORDER BY ben¨otigt in vielen F¨allen ebenfalls eine tempor¨are Tabelle.
Wenn LIMIT # mit DISTINCT kombiniert wird, h¨alt MySQL an, sobald er # eindeutige Zeilen
findet.
Wenn Sie nicht Spalten aus allen benutzten Tabellen verwenden, h¨alt MySQL mit dem
Scannen der nicht benutzten Tabellen an, sobald er die erste
¨
Ubereinstimmung gefunden
hat.
SELECT DISTINCT t1.a FROM t1,t2 where t1.a=t2.a;
Im Beispiel wird angenommen, dass t1 vor t2 benutzt wird (¨uberpr¨ufen Sie das mit
EXPLAIN). In diesem Fall h¨ort MySQL auf, von t2 zu lesen (f¨ur diese bestimmte Zeile in
t1), sobald die erste Zeile in t2 gefunden wurde.
6.2.6 Wie MySQL LEFT JOIN optimiert
A LEFT JOIN B ist in MySQL wie folgt implementiert:
• Die Tabelle B wird als abh¨angig von Tabelle A und allen Tabellen, von denen A abh¨angig
ist, gesetzt.
• Die Tabelle A wird als abh¨angig von allen Tabellen (ausser B) gesetzt, die in der LEFT
JOIN-Bedingung aufgef¨uhrt sind.
• Alle LEFT JOIN-Bedingungen werden zu WHERE-Klausel verschoben.
• Alle Standard-Join-Optimierungen werden durchgef¨uhrt, mit der Ausnahme, dass eine
Tabelle immer nach allen Tabellen gelesen wird, von denen sie abh¨angig ist. Wenn es
eine zirkul¨are Abh¨angigkeit gibt, gibt MySQL einen Fehler aus.
• Alle Standard-WHERE-Optimierungen werden durchgef¨uhrt.
• Wenn es eine Zeile in A gibt, die mit der WHERE-Klausel ¨ubereinstimmt, aber keine Zeile
in B, die mit der LEFT JOIN-Bedingung ¨ubereinstimmt, wird eine zus¨atzliche Zeile f¨ur
B erzeugt, deren Spalten alle auf NULL gesetzt sind.
• Wenn Sie LEFT JOIN benutzen, um Zeilen zu finden, die in einer Tabelle nicht existieren,
und Sie folgendes im WHERE-Teil angeben: spalten_name IS NULL, wobei spalten name
eine Spalte ist, die als NOT NULL deklariert ist, h¨ort MySQL mit der Suche nach weiteren
Zeilen auf (f¨ur eine bestimmte Schl¨usselkombination), nachdem er eine Zeile gefunden
hat, die mit der LEFT JOIN-Bedingung ¨ubereinstimmt.
RIGHT JOIN ist analog zu LEFT JOIN implementiert.
Comentarios a estos manuales