当前位置: 代码迷 >> SQL >> Sqlite3-基于事宜的批量插入
  详细解决方案

Sqlite3-基于事宜的批量插入

热度:59   发布时间:2016-05-05 11:54:05.0
Sqlite3-基于事务的批量插入

?

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