
Kapitel 6: MySQL-Optimierung 349
legen Sie einen Index auf diese. Der erste Index-Teil sollte die meistbenutzte Spalte
sein. Wenn Sie IMMER viele Spalten benutzen, sollten Sie die Spalte zuerst benutzen,
die mehr Duplikate hat, um eine bessere Kompression des Indexes zu erzielen.
• Wenn es sehr wahrscheinlich ist, dass eine Spalte ein eindeutiges Pr¨afix auf der ersten
Anzahl von Zeichen hat, ist es besser, nur dieses Pr¨afix zu indexieren. MySQL un-
terst¨utzt einen Index auf einem Teil einer Zeichen-Spalte. K¨urzere Indexe sind nicht
nur schneller, weil sie weniger Plattenplatz brauchen, sondern auch, weil Sie mehr Tr-
effer im Index-Cache erhalten und daher weniger Festplattenzugriffe ben¨otigen. Siehe
Abschnitt 6.5.2 [Server parameters], Seite 355.
• Unter manchen Umst¨anden kann es vorteilhaft sein, eine Tabelle zu teilen, die sehr oft
gescannt wird. Das gilt insbesondere, wenn diese ein dynamisches Tabellenformat hat
und es m¨oglich ist, durch die Zerlegung eine kleinere Tabelle mit statischem Format zu
erhalten, die benutzt werden kann, um die relevanten Zeilen zu finden.
6.4.3 Wie MySQL Indexe benutzt
Indexe werden benutzt, um Zeilen mit einem bestimmten Spaltenwert schnell zu finden.
Ohne Index m¨usste MySQL mit dem ersten Datensatz anfangen und dann durch die gesamte
Tabelle lesen, bis er die relevanten Zeilen findet. Je gr¨oßer die Tabelle, desto mehr Zeit kostet
das. Wenn die Tabellen f¨ur die infrage kommenden Zeilen einen Index hat, kann MySQL
schnell eine Position bekommen, um mitten in der Daten-Datei loszusuchen, ohne alle Daten
zu betrachten. Wenn eine Tabelle 1.000 Zeilen hat, ist das mindestens 100 mal schneller
als sequentielles Lesen. Wenn Sie jedoch auf fast alle 1.000 Zeilen zugreifen m¨ussen, geht
sequentielles Lesen schneller, weil man mehrfache Festplattenzugriffe einspart.
Alle MySQL-Indexe (PRIMARY, UNIQUE und INDEX) sind in B-B¨aumen gespeichert. Ze-
ichenketten werden automatisch pr¨afix-komprimiert, ebenfalls werden Leerzeichen am Ende
komprimiert. Siehe Abschnitt 7.5.7 [CREATE INDEX], Seite 469.
Indexe werden benutzt, um:
• Schnell die Zeilen zu finden, die mit einer WHERE-Klausel ¨ubereinstimmen.
• Zeilen aus anderen Tabellen abzurufen, wenn Sie Joins durchf¨uhren.
• Den MAX()- oder MIN()-Wert f¨ur eine spezielle indizierte Spalte zu finden. Das wird
durch einen Pr¨aprozessor optimiert, der ¨uberpr¨uft, ob Sie WHERE schluessel teil # =
constant auf allen Schl¨usselteilen < N verwenden. In diesem Fall f¨uhrt MySQL ein
einzige Schl¨usselnachschlagen durch und ersetzt den MIN()-Ausdruck mit einer Kon-
stanten. Wenn alle Ausdr¨ucke durch Konstanten ersetzt sind, gibt die Anfrage sofort
ein Ergebnis zur¨uck:
SELECT MIN(schluessel_teil2),MAX(schluessel_teil2) FROM tabelle where schluessel_teil1=10
• Eine Tab elle zu sortieren oder zu gruppieren, wenn das Sortieren oder Gruppieren mit
dem am weitesten links stehenden Pr¨afix eines benutzbaren Schl¨ussels durchgef¨uhrt
wird (zum Beispiel ORDER BY schluessel_teil_1,schluessel_teil_2). Der
Schl¨ussel wird in umgekehrter Reihenfolge gelesen, wenn allen Schl¨usselteilen DESC
folgt.
Der Index kann auch benutzt werden, selbst wenn ORDER BY nicht exakt mit dem Index
¨ubereinstimmt, solange alle unbenutzten Indexteile und alle zus¨atzlichen ORDER BY-
Comentarios a estos manuales