Teil 4: MySQL 4 - Optimierung bei Insert-Befehlen

SQL-Optimierung: Daten effizient in Tabellen einfügen

Allgemeine Konzepte

Einige dieser Aspekte (insbesondere die Länge der Statements) erscheinen weniger relevant, aber wenn Sie sehr viele Daten laden, bedeuten selbst kleine Effizienzsteigerungen eine Verbesserung. Wir wenden die folgenden allgemeinen Konzepte an, um mehrere praktische Schlussfolgerungen zu demonstrieren, wie Daten am schnellsten geladen werden können:

  • LOAD DATA ist (in allen Varianten) effizienter als INSERT, weil dabei große Datenmengen geladen werden. Der Indexcache muss weniger häufig geleert werden, und der Server muss nur eine Anweisung parsen und interpretieren, nicht mehrere.

  • LOAD DATA ist effizienter als LOAD DATA LOCAL. Bei LOAD DATA muss sich die Datei auf dem Server befinden, und Sie brauchen eine FILE-Berechtigung, aber der Server kann die Datei direkt von der Festplatte lesen. Bei LOAD DATA LOCAL liest der Client die Datei und sendet sie über das Netzwerk an den Server, was weniger schnell erfolgt.

  • Wenn Sie INSERT verwenden müssen, benutzen Sie die Form, die erlaubt, mehrere Zeilen in einer einzigen Anweisung anzugeben:

INSERT INTO tbl_name VALUES(...),(...),... ;

Je mehr Zeilen Sie in der Anweisung angeben können, desto besser. Damit brauchen Sie insgesamt weniger Anweisungen, und der Indexcache muss nicht so oft geleert werden. Der Widerspruch zur früheren Bemerkung, dass kürzere Anweisungen schneller verarbeitet werden können, ist nur ein scheinbarer. An dieser Stelle gilt das Prinzip, dass eine einzelne INSERT-Anweisung, die mehrere Zeilen einfügt, insgesamt schneller ist als eine entsprechende Menge einzelner INSERT-Anweisungen für jeweils eine Zeile. Auch kann die mehrzeilige Anweisung auf dem Server mit wesentlich seltenerer Leerung des Indexcaches verarbeitet werden.