1. SQLiteで遊んでいる。
コマンドラインからでも気軽に試せるし、rubyで少しスクリプトを書いてもよい。
2万件近くレコードがあるのに、一瞬にして結果を表示してくれるのがおもしろくて仕方がない。
図書カードが確か2,500円分あったので、今日はSQLの本を一冊購入してこようと思う。
csvファイルから読み込むには、コマンドラインから
sqlite3 -separator , test.db ".import test.csv test"
なんて書いてもよいのだけれども、自分のつたない知識では主キーを設定できなかったので、rubyで一項目ずつ加えていくことにした。
ただし、そのまま一項目ずつ加えると劇的に遅いので、トランザクションを使う。
db.transaction begin db.execute "insert test (hoge, piyo) values(?, ?)", hoge, piyo db.commit rescue db.rollback end
こんな風に使うらしい。
トランザクションを明示的にしない場合には、裏で一項目追加されるごとにトランザクションをおこない(この書き方があっているかどうかは知らない)、commitされるそうだ。
それで、遅くなる理由が納得できた。
事実、トランザクションを使うと何倍も早く追加ができた。