Rolf B: ich möchte eine sehr grosse CSV Datei in eine MYSQL Datenbank einspielen

Beitrag lesen

Hallo TS,

einen Massenimport per INSERT sollte man meiden wie die Russen die Demokratie, vor allem, wenn wie hier massive Massen anfallen.

  • ein INSERT muss vom Server zunächst geparsed werden -> Extraaufwand in der CPU
  • ein INSERT-Statement wird ganz oder gar nicht ausgeführt, d.h. die Daten müssen im Transaction Log festgehalten werden -> Extraaufwand auf der Platte.
  • INSERTs aktualisieren live alle Indexe. Das ist langsam. Ein LOAD saugt erst alle Daten herein und erstellt die Indexe dann von Null auf neu. Das ist unterm Strich deutlich schneller.

Je nach DBMS kann man durch den Versuch, per INSERT eine Tabelle zu laden, auch reichlich bemessenen Plattenplatz zum Überlaufen bringen.

Einen Massenimport macht man - wie von Dir verlinkt - per LOAD. Der setzt aber eine gewisse Standardisierung der Eingabedatei voraus, und Jörg meint ja, dass er eine Mischung bunten Bullshits erhält, bei dem er teils erraten muss, was gemeint ist. Dafür schreibt man normalerweise ein Vorverarbeitungsscript, das im Zweifelsfall die Daten aussteuert, mit denen es nichts anfangen kann (sofern das aus Konsistenzgründen möglich ist).

Das alles hat den Zweck, die DB so schnell wie möglich auf Stand zu bringen und die Downtime gering zu halten.

Rolf

--
sumpsi - posui - obstruxi