Datenbank eintrag beschleunigen
-
Hallo,
folgende Situation:
Ich parse in einem Forms-Projekt eine Textdatei in der sehr viele Pokerhände stehen.
Nachdem eine Hand eingelesen ist wird sie in eine MYSQL Datenbank geschrieben, und es wird weiter eingelesen.
Das ganz funktioniert auch, aber ist sehr langsam.
Es soll aber jede einzelne Hand in der Datenbank gespeichert werden.Nun meine Frage, kann ich in irgendeiner Weise das eintragen in der DB beschleunigen?
Vielleicht erst alle Hände in ein Array oder ähnlichen schreiben, und erst am nach dem einlesen der Textdatei alle nacheinander in die DB schreiben?
Aber ich denke dieser Ansatz wird nicht schneller sein.
Kann man vielleicht irgendwie mehrere Datenbankanfragen zu einer zusammenfassen?Wäre nett wenn mir jemand eine Tip geben könnte.
-
Wenn ich mich recht erinnere unterstützt MySql das Einfügen mehrerer Datensätze mit einem Statement:
INSERT INTO BLA (COL1, COL2)
VALUES
(1, 2),
(1, 2),
(1, 2),
usw...
-
Erstmal vielen Dank für die antwort.
Würde denn das deutlich schneller sein als 1000 Einträge nacheinander?
-
Ich denke schon. Ich habe MySql schon ewig nicht mehr benutzt. Damals (3.x glaube ich) war es jedenfalls deutlich schneller.
-
BULKCOPY aus NET ist das Stichwort
-
Ja das mit den Values geht und ist definitiv schneller als 1000 einzelne Einträge.
Eigentlich logisch, 1000 verbindungen aufbauen oder 1 verbindung aufbauen.Allerdings weiss ich nicht, ob Querys eine maximale Länger oder sowas haben dürfen. daherhabe ich das in meinem Projekt so gemacht, das ich immer 100 einträge auf einmal mache.
-
Vielen Dank für Eure Antworten, ich werde es nun mal ausprobieren.
-
max_allowed_packet könnte bei sehr langen Queries in die Quere kommen (lässt sich aber auf mehrere GB hoch setzen)
Ansonsten evtl. interessant:
http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html
-
Ich benutze C++/Cli für die Anwendung, und arbeite da mit dem DataSet-Designer.
Dort habe ich all meine SQL-Querys erstellt.
Ich habe aber keine Ahnung wie ich die Querys dann dynamisch erstellen soll, was ja erforderlich ist für Euren Vorschag.
Könnt Ihr mir nochmal helfen?