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 alsINSERT
, 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 alsLOAD DATA LOCAL
. BeiLOAD DATA
muss sich die Datei auf dem Server befinden, und Sie brauchen eineFILE
-Berechtigung, aber der Server kann die Datei direkt von der Festplatte lesen. BeiLOAD 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.