348 MySQL - Technische Referenz f¨ur Version 5.0.1-alpha
Indexes. Das Gute daran ist, dass man sich damit - abh¨angig davon, wie gut der Index
gecachet ist - einen Festplatten-Lesezugriff spart. Das Schlechte an diesem Layout sind
folgende Dinge:
• Tabellenscannen geht viel langsamer, weil man durch alle Indexe lesen muss, um an
die Daten zu kommen.
• Man kann nicht nur die Index-Tabelle benutzen, um Daten einer Anfrage abzurufen.
• Man verliert viel Speicherplatz, weil man Indexe von den Nodes duplizieren muss (weil
man die Zeile nicht in den Nodes speichern kann).
• L¨oschvorg¨ange werden die Tabelle im Zeitablauf zersetzen (weil Indexe in Nodes
¨ublicherweise bei L¨oschvorg¨angen nicht aktualisiert werden).
• Ist es schwieriger, NUR die Index-Daten zu cachen.
6.4.2 Wie Sie Ihre Daten so klein wie m¨oglich bekommen
Eine der grundlegendsten Optimierungen besteht darin, Ihre Daten (und Indexe) dazu zu
bekommen, dass sie m¨oglichst wenige Platz auf der Platte (und im Arbeitsspeicher) be-
nutzen. Das kann zu gewaltigen Verbesserungen f¨uhren, weil Lesezugriffe von der Platte
schneller ablaufen und normalerweise weniger Hauptspeicher benutzt wird. Das Index-
ieren nimmt dar¨uber hinaus weniger Ressourcen in Anspruch, wenn es auf kleinere Spalten
durchgef¨uhrt wird.
MySQL unterst¨utzt viele verschiedene Tabellentypen und Zeilenformate. Wenn Sie das
richtige Tabellenformat benutzen, kann Ihnen das große Performance-Gewinne bringen.
Siehe Kapitel 8 [Table types], Seite 482.
Sie erhalten bessere Performance auf eine Tabelle und minimieren den ben¨otigten Speicher-
platz, wenn Sie die unten aufgef¨uhrten Techniken verwenden:
• Benutzen Sie die effizientesten (kleinsten) m¨oglichen Typen. MySQL hat viele spezial-
isierte Typen, die Plattenplatz und Arbeitsspeicher sparen.
• Benutzen Sie - falls m¨oglich - die kleineren Ganzzahl-Typen, um kleinere Tabellen zu
erhalten. MEDIUMINT zum Beispiel ist oft besser als INT.
• Deklarieren Sie Spalten - falls m¨oglich - als NOT NULL. Das macht alles schneller und
Sie sparen ein Bit pro Spalte. Beachten Sie, dass, wenn Sie wirklich NULL in Ihrer
Applikation ben¨otigen, Sie dieses nat¨urlich benutzen sollten. Vermeiden Sie nur, einfach
alle Spalten vorgabem¨aßig auf NULL zu haben.
• Wenn Sie keine Spalten variabler L¨ange haben (VARCHAR, TEXT oder BLOB-Spalten), wird
ein Festgr¨oßenformat benutzt. Das ist schneller, mag aber leider etwas Speicherplatz
verschwenden. Siehe Abschnitt 8.1.2 [MyISAM table formats], Seite 486.
• Der prim¨are Index einer Tabelle sollte so kurz wie m¨oglich sein. Das macht die Identi-
fikation einer Zeile schnell und effizient.
• Bei jeder Tabelle m¨ussen Sie entscheiden, welche Speicher- / Index-Methode benutzt
werden soll. Siehe Kapitel 8 [Table types], Seite 482.
• Erzeugen Sie nur die Indexe, die Sie tats¨achlich brauchen. Indexe sind gut f¨ur das
Abfragen von Daten, aber schlecht, wenn Sie Dinge schnell speichern m¨ussen. Wenn Sie
meist auf eine Tabelle zugreifen, indem Sie nach einer Kombination von Spalten suchen,
Kommentare zu diesen Handbüchern