您现在的位置是:首页 > 文章详情

(C#版本)提升SQlite数据库效率——开启事务,极速插入数据,3秒100万,32秒1000万条数据

日期:2018-06-12点击:358

SQLite插入数据效率最快的方式就是:开启事务  +   insert语句  +  关闭事务(提交)

利用事务的互斥性,如果在批量的插入操作前显式地开启一次事务,在插入操作结束后,提交事务,那么所有的操作将只执行一次事务,大大地提高IO效率

开启事务和提交事务时缺省的,如果不显式写出来,将在每次insert语句前开启事务,insert语句后提交,如果执行insert语句1000万次,那么将自动开启并提交1000万次!!!

可以尝试,去掉下面代码中两行红色代码,速度将显著下降!!!

 

 

 1 using System;  2 using System.IO;  3 using System.Data.SQLite;  4 using System.Diagnostics;  5 using System.Data.Common;  6  7 namespace SqliteTran  8 {  9 class Program 10  { 11 static void Main(string[] args) 12  { 13 DbProviderFactory Dbfactory = SQLiteFactory.Instance; 14 using (DbConnection dbConn = Dbfactory.CreateConnection()) 15  { 16 //连接数据库 17 File.Delete("NBA.db4"); 18 dbConn.ConnectionString = "data source = NBA.db4"; 19  dbConn.Open(); 20 //创建数据表 21 string sql = "create table Garnett ([age] INTEGER PRIMARY KEY, [s] TEXT COLLATE NOCASE)"; 22 DbCommand cmd = dbConn.CreateCommand(); 23 cmd.Connection = dbConn; 24 cmd.CommandText = sql; 25  cmd.ExecuteNonQuery(); 26 27 // 添加参数 28  cmd.Parameters.Add(cmd.CreateParameter()); 29 // 开始计时 30 Stopwatch watch = new Stopwatch(); 31  watch.Start(); 32 33 DbTransaction trans = dbConn.BeginTransaction(); 34 // 连续插入记录 35 for (int i = 0; i < 1000000; i++) 36  { 37 cmd.CommandText = "insert into Garnett ([s]) values (?)"; 38 cmd.Parameters[0].Value = i.ToString(); 39  cmd.ExecuteNonQuery(); 40  } 41  trans.Commit(); 42  dbConn.Close(); 43 // 停止计时 44  watch.Stop(); 45  Console.WriteLine(watch.Elapsed); 46  Console.ReadLine(); 47  } 48  } 49  } 50 }

 

原文链接:https://yq.aliyun.com/articles/619725
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章