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

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

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

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

 using System;
using System.IO;
using System.Data.SQLite;
using System.Diagnostics;
using System.Data.Common; namespace SqliteTran
{
class Program
{
static void Main(string[] args)
{
DbProviderFactory Dbfactory = SQLiteFactory.Instance;
using (DbConnection dbConn = Dbfactory.CreateConnection())
{
//连接数据库
File.Delete("NBA.db4");
dbConn.ConnectionString = "data source = NBA.db4";
dbConn.Open();
//创建数据表
string sql = "create table Garnett ([age] INTEGER PRIMARY KEY, [s] TEXT COLLATE NOCASE)";
DbCommand cmd = dbConn.CreateCommand();
cmd.Connection = dbConn;
cmd.CommandText = sql;
cmd.ExecuteNonQuery(); // 添加参数
cmd.Parameters.Add(cmd.CreateParameter());
// 开始计时
Stopwatch watch = new Stopwatch();
watch.Start(); DbTransaction trans = dbConn.BeginTransaction();
// 连续插入记录
for (int i = ; i < ; i++)
{
cmd.CommandText = "insert into Garnett ([s]) values (?)";
cmd.Parameters[].Value = i.ToString();
cmd.ExecuteNonQuery();
}
trans.Commit();
dbConn.Close();
// 停止计时
watch.Stop();
Console.WriteLine(watch.Elapsed);
Console.ReadLine();
}
}
}
}

不开启事务,插入1k行

开启事务,插入100w行

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

  1. Sqlite数据库中的事务

    public void testTrasaction() throws Exception{  PersonSQLiteOpenHelper helper = new PersonSQLiteOpen ...

  2. 提升SQLite数据插入效率低、速度慢的方法

    前言 SQLite数据库由于其简单.灵活.轻量.开源,已经被越来越多的被应用到中小型应用中.甚至有人说,SQLite完全可以用来取代c语言中的文件读写操作.因此我最近编写有关遥感数据处理的程序的时候, ...

  3. 提升SQLite数据插入效率低、速度慢的方法(转)

    前言 SQLite数据库由于其简单.灵活.轻量.开源,已经被越来越多的被应用到中小型应用中.甚至有人说,SQLite完全可以用来取代C语言中的文件读写操作.因此我最近编写有关遥感数据处理的程序的时候, ...

  4. [转载]提升SQLite数据插入效率低、速度慢的方法

    转载地址:http://blog.csdn.net/chenguanzhou123/article/details/9376537#,如果有侵犯原创,请留言告知,本人会及时删除. 前言 SQLite数 ...

  5. IOS数据存储之Sqlite数据库

    前言: 之前学习了数据存储的NSUserDefaults,归档和解档,沙盒文件存储,但是对于数据量比较大,需要频繁查询,删除,更新等操作的时候无论从效率上还是性能上,上述三种明显不能满足我们的日常开发 ...

  6. android: SQLite 数据库的最佳实践

    6.5.1    使用事务 前面我们已经知道,SQLite 数据库是支持事务的,事务的特性可以保证让某一系列的操 作要么全部完成,要么一个都不会完成.那么在什么情况下才需要使用事务呢?想象以下场 景, ...

  7. Android Sqlite 数据库版本更新

      Android Sqlite 数据库版本更新 http://87426628.blog.163.com/blog/static/6069361820131069485844/ 1.自己写一个类继承 ...

  8. Android 开发中使用 SQLite 数据库

    SQLite 介绍 SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能. 此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PHP ...

  9. Qt中提高sqlite的读写速度(使用事务一次性写入100万条数据)

    SQLite数据库本质上来讲就是一个磁盘上的文件,所以一切的数据库操作其实都会转化为对文件的操作,而频繁的文件操作将会是一个很好时的过程,会极大地影响数据库存取的速度.例如:向数据库中插入100万条数 ...

随机推荐

  1. uwsgi的使用

    uwsgi是一个WEB服务器,只要用于python部分,类似于nginx ,apache 1 使用pip命令安装 pip install uwsgi 安装成功以后 可以做一个简单的测试 2 新建一个t ...

  2. ruby gem install rails 错误解决

    最近打算看ruby. 今天用命令gem install rails的时候碰到这样的错误提示: ERROR:  Error installing XXXXXXXXXXX:            The ...

  3. Linux及安卓的事件处理资料

    事件处理机制介绍: https://source.android.com/devices/input/overview.html http://newandroidbook.com/Book/Inpu ...

  4. 30.概述strust2中的拦截器

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 拦截器是Struts2框架的核心,它主要完成解析请求参数.将请求参数赋值给A ...

  5. Cascade属性的取值

    Cascade属性的取值有:1.none:忽略其他关联的对象,默认值.2.save-update:当session通过save(),update(),saveOrUpdate()方法来保存或更新对象时 ...

  6. django框架 input 文本框 单选框 多选框 上传文件 等数据传输后台的程序 request.getlist接收多个结果 obj.chunks 用于文件传输 enctype="multipart/form-data文件传输必备表头

    在上一个博客中,我们学习了如果创建django,这里我们主要讲如何把数据传给后台 在url文件中, 从app01中导入views, 以及创建url(r'^login/', views.login) f ...

  7. 让 IE6支持max-height

    min-height min-height:100px; _height:100px max-height max-height:200px; overflow:auto;/*超出部分显示滚动条*/ ...

  8. vs2010下使用绘图控件MsChart的方法

    1. 使用setupmschart.exe将MSCHRT20.OCX注册到系统: http://download.csdn.net/detail/xiaowh001/8892147 2. 在vs201 ...

  9. Jquery的树插件jqxTreeGrid的使用小结(实现基本的增删查改操作)

    一.引入相应的js <link rel="stylesheet" href="../../jqwidgets/styles/jqx.base.css" t ...

  10. 利率计算v2.0--web版--软件工程

    .客户说:帮我开发一个复利计算软件. .如果按照单利计算,本息又是多少呢? .假如30年之后要筹措到300万元的养老金,平均的年回报率是3%,那么,现在必须投入的本金是多少呢? .利率这么低,复利计算 ...