#!/usr/bin/perl use strict; use warnings; use Data::Dumper; use DBI qw(:sql_types); my $dbfile = "./TestingInsert.sqlite"; if (-e $dbfile) {unlink $dbfile or die "Delete of $dbfile failed! $!\n";} my $start_seconds = time(); my $dbh = DBI->connect("dbi:SQLite:dbname=$dbfile","","",{RaiseError => 1}) or die "Couldn't connect to database: " . DBI->errstr; $dbh->do ("CREATE TABLE test ( id integer PRIMARY KEY AUTOINCREMENT, version integer, jobnumber integer ); "); $dbh->do("BEGIN"); #running one transaction is needed for speed!!! import_data(); $dbh->do("COMMIT"); my $end_time = time(); print "Total elasped time: ", $end_time-$start_seconds, "\n"; sub import_data { my $jobnumber = 1; my $add = $dbh->prepare("INSERT INTO test ( version, jobnumber ) VALUES(?,?)"); while ($jobnumber < 170568) { $add->execute($jobnumber, $jobnumber++); #DBI insert } return; } __END__ Using a comitt for each insert: Total elasped time: 17833 => 297 min => 4.9 hours Using a single transaction for 170,568 inserts: Total elasped time: 3 seconds