Teil 4: MySQL 4 - Optimierung bei Insert-Befehlen

SQL-Optimierung: Daten effizient in Tabellen einfügen

Datenmenge reduzieren

  • Verwenden Sie das komprimierte Client/Server-Protokoll, um die über das Netzwerk geschickte Datenmenge zu reduzieren. Für die meisten MySQLClients kann das mithilfe der Kommandozeilenoption --compress realisiert werden. Im Allgemeinen sollte diese Methode nur in langsamen Netzwerken eingesetzt werden, weil die Komprimierung relativ viel Prozessorzeit in Anspruch nimmt.

  • Überlassen Sie es MySQL, Standardwerte für Sie einzufügen, d.h. geben Sie in INSERT-Anweisungen keine Spalten an, denen ohnehin der Standardwert zugewiesen wird. Ihre Anweisung wird dadurch kürzer, und Sie müssen nicht so viele Zeichen über das Netzwerk an den Server senden. Außerdem hat der Server, weil die Anweisungen weniger Werte enthalten, weniger Arbeit mit dem Parsing und der Wertekonvertierung.

  • Wenn eine Tabelle indiziert wird, können Sie den Indizierungsaufwand reduzieren, indem Sie das Einfügen im Rahmen einer Stapelverarbeitung vornehmen (LOAD DATA oder mehrzeilige INSERT-Anweisungen). Damit muss der Index nicht so oft aktualisiert werden, weil der Indexcache nur geleert werden muss, nachdem alle Zeilen verarbeitet wurden, und nicht nach jeder Zeile.

  • Wenn Sie bei MyISAM- und ISAM-Tabellen sehr viele Daten in eine neue Tabelle einfügen müssen, sollten Sie die Tabelle zunächst ohne Indizes erzeugen, die Daten laden und die Indizes dann anlegen. Es ist schneller, die Indizes alle gleichzeitig zu erzeugen, anstatt sie für jede Zeile zu ändern. Bei Tabellen, die bereits über Indizes verfügen, kann das Laden der Daten schneller sein, wenn Sie den Index vor dem Laden löschen oder deaktivieren und ihn nach dem Laden neu aufbauen oder reaktivieren. Diese Strategien gelten allerdings nicht für InnoDB- und BDB-Tabellen, weil diese Tabellentypen nicht über Optimierungsmöglichkeiten für die getrennte Indexerstellung verfügen.