辞書データコンバータの改善

SQLite の INSERT は遅いのか? - 元祖 サトシのブログ
たまたまここを見たがどうやら

SQLiteでは明示的にトランザクションを開始しない限り、INSERT処理の前後に必ず"BEGIN"、"COMMIT"が実行される

http://journal.mycom.co.jp/special/2004/php5/007.html

のために大量のINSERTを行うと非常に効率が悪いらしい。というわけで万単位のINSERTを実行する辞書データコンバータに

db.Query("BEGIN TRANSACTION;");
  (略)
db.Query("END TRANSACTION;");

の2文を追加したところ所要時間を45分から15秒*1へと短縮できた。なんか変だとは思ってたけど知らないって怖いね。というか恥ずかしくて泣きそうだよ。
一度やればいい処理なので多分ほとんどの利用者にとっては意味が無いと思われるが、ラボを更新しておいた。まだ遅いっちゃ遅いし環境にも因ると思うけど格段に早くなるのは間違いない。一般公開考えてもいいレベルかもしれない。

*1:どちらも時計で見ただけだけ