
Kapitel 6: MySQL-Optimierung 351
Suchen mit spalte IS NULL benutzt Indexe, wenn spalte ein Index ist.
MySQL benutzt normalerweise den Index, der die geringste Anzahl von Zeilen findet. Ein
Index wird benutzt f¨ur Spalten, die Sie mit folgenden Operatoren vergleichen: =, >, >=, <,
<=, BETWEEN und einem LIKE ohne Platzhalter-Pr¨afix wie ’etwas%’.
Jeder Index, der nicht alle AND-Ebenen in der WHERE-Klausel umfasst, wird nicht benutzt,
um die Anfrage zu optimieren. Mit anderen Worte: Um einen Index benutzen zu k¨onnen,
muss ein Pr¨afix des Indexes in jeder AND-Gruppe benutzt werden.
Die folgenden WHERE-Klauseln benutzen Indexe:
... WHERE index_teil1=1 AND index_teil2=2 AND andere_spalte=3
... WHERE index=1 OR A=10 AND index=2 /* index = 1 OR index = 2 */
... WHERE index_teil1=’hello’ AND index_teil_3=5
/* optimiert "index_teil1=’hello’" */
... WHERE index1=1 AND index2=2 OR index1=3 AND index3=3;
/* kann den Index auf index1 benutzen, aber nicht auf index2 oder index 3 */
Die folgenden WHERE-Klauseln benutzen KEINE Indexe:
... WHERE index_teil2=1 AND index_teil3=2 /* index_teil_1 wird nicht benutzt */
... WHERE index=1 OR A=10 /* Index wird nicht in beiden AND-Teilen benutzt */
... WHERE index_teil1=1 OR index_teil2=10 /* Kein Index umfasst alle Zeilen */
Beachten Sie, dass MySQL in manchen F¨allen keinen Index benutzt, selbst wenn einer
verf¨ugbar w¨are. Einige solcher F¨alle sind hier aufgef¨uhrt:
• Wenn die Benutzung des Indexes erfordern w¨urde, dass MySQL auf mehr als 30% der
Zeilen in der Tabelle zugreift. (In diesem Fall ist ein Tabellenscan wahrscheinlich viel
schneller, weil dieser weniger Festplattenzugriffe braucht.) Beachten Sie, dass MySQL
den Index dennoch benutzt, wenn eine Anfrage LIMIT benutzt, um nur ein paar Zeilen
abzufragen, weil er dann schneller die wenigen Zeilen im Ergebnis finden kann.
6.4.4 Spalten-Indexe
Alle MySQL-Spaltentypen k¨onnen indiziert werden. Die Benutzung von Indexen auf den rel-
evanten Spalten ist die beste Art, die Performance von SELECT-Operationen zu verbessern.
Die maximale Anzahl von Schl¨usseln und die maximale Index-L¨ange ist durch den Tabellen-
Handler vorgegeben. Siehe Kapitel 8 [Table types], Seite 482. Bei allen Tabellen-Handlern
k¨onnen Sie zumindest 16 Schl¨ussel und eine Gesamtindexl¨ange von zumindest 256 Bytes
haben.
Bei CHAR- und VARCHAR-Spalten k¨onnen Sie ein Pr¨afix einer Spalte indexieren. Das ist viel
schneller und erfordert weniger Plattenspeicher als das Indexieren einer ganzen Spalte. Die
Syntax, die im CREATE TABLE-Statement benutzt wird, um ein Spaltenpr¨afix zu indexieren,
sieht wie folgt aus:
KEY index_name (spalten_name(laenge))
Das unten stehende Beispiel erzeugt einen Index auf die ersten 10 Zeichen der name-Spalte:
mysql> CREATE TABLE test (
name CHAR(200) NOT NULL,
KEY index_name (name(10)));
Comentarios a estos manuales