352 MySQL - Technische Referenz f¨ur Version 5.0.1-alpha
Bei BLOB- und TEXT-Spalten m¨ussen Sie ein Pr¨afix der Spalte indexieren. Sie k¨onnen nicht
die gesamte Spalte indexieren.
Ab MySQL-Version 3.23.23 k¨onnen Sie auch spezielle FULLTEXT-Indexe erzeugen. Sie
werden f¨ur die Volltextsuche benutzt. Nur der MyISAM-Tabellentyp unterst¨utzt FULLTEXT-
Indexe. Sie k¨onnen nur auf VARCHAR- und TEXT-Spalten erzeugt werden. Die Indexierung
erfolgt immer ¨uber die gesamte Spalte; teilweises Indexieren wird nicht unterst¨utzt. Siehe
Abschnitt 7.8 [Fulltext Search], Seite 474 f¨ur Details.
6.4.5 Mehrspaltige Indexe
MySQL kann Indexe auf mehrfache Spalten erzeugen. Ein Index darf aus bis zu 15 Spalten
bestehen. (Auf CHAR- und VARCHAR-Spalten k¨onnen Sie auch ein Pr¨afix der Spalte als Teil
eines Indexes benutzen).
Ein mehrspaltiger Index kann als sortiertes Array betrachtet werden, das Werte enth¨alt, die
durch die Verkettung der Werte der indizierten Spalten erzeugt werden.
MySQL benutzt mehrspaltige Indexe in einer Art, dass Anfragen schnell werden, wenn Sie
eine bekannte Menge f¨ur die erste Spalte des Indexes in einer WHERE-Klausel angeben, selbst
wenn Sie keine Werte f¨ur die anderen Spalten angeben.
Angenommen, einen Tabelle wurde wie folgt erzeugt:
mysql> CREATE TABLE test (
id INT NOT NULL,
nachname CHAR(30) NOT NULL,
vorname CHAR(30) NOT NULL,
PRIMARY KEY (id),
INDEX name (nachname,vorname));
Dann ist der Index name ein Index ¨uber nachname und vorname. Der Index wird f¨ur An-
fragen benutzt, die Werte in einem bekannten Bereich f¨ur nachname angeben, oder sowohl
f¨ur nachname als auch f¨ur und vorname. Daher wird der name-Index in folgenden Anfragen
benutzt:
mysql> SELECT * FROM test WHERE nachname="Widenius";
mysql> SELECT * FROM test WHERE nachname="Widenius"
AND vorname="Michael";
mysql> SELECT * FROM test WHERE nachname="Widenius"
AND (vorname="Michael" OR vorname="Monty");
mysql> SELECT * FROM test WHERE nachname="Widenius"
AND vorname >="M" AND vorname < "N";
In folgenden Anfragen wird der name-Index jedoch NICHT benutzt:
mysql> SELECT * FROM test WHERE vorname="Michael";
mysql> SELECT * FROM test WHERE nachname="Widenius"
OR vorname="Michael";
Kommentare zu diesen Handbüchern