2006年6月 9日 14:30

DBD::SQLiteのお勉強

DBD::SQLiteの勉強をしてますが、検索してもあまり日本語の情報は得られませんね。

というわけで覚え書き。
SQLiteはトランザクションを明示しとかないと、更新系のコマンドが実行される時は自動的にトランザクション宣言が行われるらしい。
つまり、100件のデータ追加では100回のBEGIN→COMMITが繰り返されるわけで、処理が非常に遅くなるというわけです。

PerlのDBD::SQLiteでこれを防ぐには下記のように書いとけば良いみたい。

my $mydb = 'hoge.db';
my $dbh = DBI->connect("dbi:SQLite:dbname=$mydb","","",{ AutoCommit => 0 });
$dbh->do('CREATE TABLE foo (a,b,c)');
$dbh->do('BEGIN');
my $insert = $dbh->prepare("INSERT INTO foo VALUES(?,?,?)");
$insert->execute("1","2","3");
$dbh->do('COMMIT');