?
sqlite3单条插入速度在100ms左右,如果插入上万条的数据....
sqlite3默认每插入一条数据都会开启一个事务,执行,关闭
如果批量插入的操作放在一个事务中,避免多此文件打开,写入,关闭,速度会有很大提升!
下面是用benchmark做了一个测试,效果还不错!
?
?
?
require 'sqlite3'require 'active_support/all'def creat_table(db,table_name) db.execute <<-SQL create table "#{table_name}" ( name varchar(30), val int ); SQLenddef test_insert_with_no_transaction(db, count) s = Benchmark.ms do 1.upto count do |index| db.execute "insert into numbers values ( ?, ? )", "ss", index end end p senddef test_insert_with_modo_transaction(db, count, modo) s = Benchmark.ms do db.transaction(modo) do |db| 1.upto count do |index| db.execute "insert into numbers values ( ?, ? )", "ss", index end end end p senddb = SQLite3::Database.new( "test.db" )p db.transaction_active?#creat_table(db,"numbers")count = 100test_insert_with_no_transaction(db, count)test_insert_with_modo_transaction(db, count, :deferred)test_insert_with_modo_transaction(db, count,:immediate)test_insert_with_modo_transaction(db, count,:exclusive)
?
?
#插入10000条的结果:速度提升100倍!
#45263.549194
#491.27984200000003
#408.979
#492.315361