342 MySQL - Technische Referenz f¨ur Version 5.0.1-alpha
6.2.10 Geschwindigkeit von DELETE-Anfragen
Wenn Sie alle Zeilen in der Tabelle l¨oschen wollen, sollten Sie TRUNCATE TABLE tabelle
benutzen. Siehe Abschnitt 7.4.7 [TRUNCATE], Seite 447.
Die Zeit, die f¨ur das L¨oschen eines Datensatzes ben¨otigt wird, ist exakt proportional zur
Anzahl der Indexe. Um Datens¨atze schneller zu l¨oschen, k¨onnen Sie die Gr¨oße des Index-
Caches herauf setzen. Siehe Abschnitt 6.5.2 [Server parameters], Seite 355.
6.2.11 Weitere Optimierungstipps
Ungeordnete Liste von Tipps f¨ur schnellere Systeme:
• Benutzen Sie persistente Verbindungen zur Datenbank, um Verbindungs-Overhead zu
vermeiden. Wenn Sie keine persistenten Verbindungen benutzen k¨onnen und viele neue
Verbindungen zur Datenbank aufmachen, sollten Sie den Wert der Thread_cache_
size-Variablen ¨andern. Siehe Abschnitt 6.5.2 [Server parameters], Seite 355.
•
¨
Uberpr¨ufen Sie immer, dass alle Ihre Anfragen tats¨achlich die Indexe benutzen, die Sie
in den Tabellen erzeugt haben. In MySQL kann man das mit dem EXPLAIN-Befehl tun.
Siehe Abschnitt 6.2.1 [Explain], Seite 329.
• Versuchen Sie, komplexe SELECT-Anfragen auf Tabellen zu vermeiden, die viel aktual-
isiert werden, um Probleme mit Tabellensperren zu vermeiden.
• Die neuen MyISAM-Tabellen k¨onnen Zeilen in eine Tabelle ohne gel¨oschte Zeile zur
gleichen Zeit einf¨ugen, wie eine andere Tabelle aus ihr liest. Wenn das f¨ur Sie wichtig
ist, sollten Sie Methoden in Betracht ziehen, bei denen Sie keine Zeilen l¨oschen m¨ussen,
oder OPTIMIZE TABLE laufen lassen, nachdem Sie viele Zeilen gel¨oscht haben.
• Benutzen Sie ALTER TABLE ... ORDER BY ausdruck1,ausdruck2,..., wenn Sie Zeilen
zumeist in der Reihenfolge ausdruck1,ausdruck2,... abrufen. Wenn Sie diese Option
nach großen
¨
Anderungen in der Tabelle nutzen, erzielen Sie eventuell h¨ohere Perfor-
mance.
• In einigen F¨allen kann es sinnvoll sein, eine Spalte einzuf¨uhren, die auf der Grundlage
von Informationen aus anderen Spalten ’gehashed’ ist. Wenn diese Spalte kurz
und halbwegs eindeutig ist, kann das schneller sein als ein großer Index auf
mehrere Spalten. In MySQL ist es sehr einfach, eine solche zus¨atzliche Spalte zu
benutzen: SELECT * FROM tabelle WHERE hash=MD5(concat(spalte1,spalte2))
AND spalte_1=’constant’ AND spalte_2=’constant’
• Bei Tabellen, die sich viel ¨andern, sollten Sie versuchen, alle VARCHAR- oder BLOB-
Spalten zu vermeiden. Sonst erhalten Sie dynamische Zeilenl¨angen, sobald Sie eine
einzige VARCHAR- oder BLOB-Spalte verwenden. Siehe Kapitel 8 [Table types], Seite 482.
• Normalerweise n¨utzt es nichts, eine Tabelle in verschiedene Tabellen aufzuteilen, nur
weil die Zeile ’viel’ werden. Um auf eine Zeile zuzugreifen, ist das wichtigste, was die
Performance betrifft, der Suchvorgang nach dem ersten Byte der Zeile auf der Platte.
Nachdem die Daten gefunden wurden, k¨onnen die meisten neuen Platten die gesamte
Zeile f¨ur die meisten Applikationen schnell genug lesen. Der einzige Fall, wo es wirklich
etwas ausmacht, wenn eine Tabelle aufgeteilt wird, ist, wenn die Tabelle dynamische
Zeilenl¨ange hat (siehe oben), was nicht in eine feste Zeilenl¨ange umgewandelt werden
Comentarios a estos manuales