Letztens bin ich über einen lustigen DB-Dump der Software Navicat gestolpert. Aufgefallen ist mir dieser Dump, weil er ca 10 Stunden!!! gebraucht hat, um sich in meine MySql Datenbank einzuspielen.

Auszugsweise sieht der Dump folgendermaßen aus:

sql INSERT INTO `channels` VALUES ('14', '3', 'IpH', 'pH', '0', '0'); INSERT INTO `channels` VALUES ('15', '3', 'IPCO2', 'pCO2', '0', '0'); INSERT INTO `channels` VALUES ('16', '3', 'IPO2', 'pO2', '0', '0'); INSERT INTO `channels` VALUES ('17', '3', 'IHCO3A', 'HCO3-akt', '0', '0'); INSERT INTO `channels` VALUES ('18', '3', 'IHCO3S', 'HCO3-std', '0', '0'); INSERT INTO `channels` VALUES ('19', '3', 'ITCO2', 'tCO2', '0', '0'); INSERT INTO `channels` VALUES ('20', '3', 'IBE', 'BE(B)', '0', '0'); INSERT INTO `channels` VALUES ('21', '3', 'IPHT', 'pH(T)', '0', '0'); INSERT INTO `channels` VALUES ('22', '3', 'IPCO2T', 'pCO2(T)', '0', '0'); INSERT INTO `channels` VALUES ('23', '3', 'IPO2T', 'pCO2(T)', '0', '0'); INSERT INTO `channels` VALUES ('24', '3', 'ICHB', 'cHb', '0', '0');

Das ganze denkt man sich jetzt multipliziert mit faktor ein-paar-hundert-tausend… so, was fällt auf? Aaaaah, wieso sindn da immer für jeden Datensatz INSERT INTO Befehle? Warum ist nicht einfach alles mit einem Befehl abgehandelt? Letzteres wäre wesentlich effizienter und würde (bei mir lokal getestet) dann in unter einer Minute durchlaufen. MySql startet nämlich für jeden INSERT INTO Befehl eine eigene Transaktion und schreibt dann wirklich Datensatz für Datensatz in die Tabelle, welches die Festplatte vollkommen überlastet => Dauert eeeewig.

In wiefern dies nun Standardverhalten der Software Navicat ist, kann ich nicht beantworten, da ich diese selber nicht einsetze, wäre sicherlich aber auch einmal interessant das in Erfahrung zu bringen.