2009-07-30 4 views
10

Ich habe gerade 1 Million Datensätze in eine einfache Sqlite-Tabelle mit fünf Spalten eingefügt. Es dauerte 18 Stunden in Java mit den jdbc-Treibern! Ich habe dasselbe in Python2.5 gemacht und es dauerte weniger als eine Minute. Die Geschwindigkeit für ausgewählte Abfragen scheint gut zu sein. Ich denke, das ist ein Problem mit den JDBC-Treibern.langsam sqlite einfügen mit den jdbc-Treibern in Java

Gibt es einen schnelleren Treiber für sqlite3 in Java?

Die Geschwindigkeit des Einfügens einer großen Anzahl von Zeilen ist wichtig für mein Schemamigrationsskript, und ich würde lieber kein externes Skript für die Migrationen verwenden müssen, wenn dies nicht der Fall ist.

EDIT: behoben mit connection.setAutoCommit (false); danke Mark Rushakoff für Hinweise auf die Lösung :)

Antwort

19

Haben Sie Ihre Abfragen autocommitted? Das könnte erklären, warum es so lange gedauert hat. Versuchen Sie, sie an einem Anfang/Ende einzufügen, damit sie nicht für jeden Einfügevorgang einen vollständigen Commit ausführen muss.

This page erklärt Beginn/Ende der Transaktion, während die FAQ berührt Einsätze/Autocommits.

+0

Das hat den Trick, danke! –

+0

verbesserte Leistung 1000x ... Danke – Ewoks

2

Wenn Sie weiter optimieren möchten, können Sie Ihre Batch-Abfragen zusammenfügen. So können Sie 1 Million Einsätze zu 1000 Einsätze von 1000 Chargen ändern.