C#,sqlite批量操作速度优化(插入1000条2分钟变0.2秒)
C#,sqlite批量操作速度优化
SQLite 作为一个轻量级嵌入式数据库,还是非常好用的。极力推荐~~~~~~
今天有个朋友测试 SQLite,然后得出的结论是:SQLite 效率太低,批量插入1000条记录,居然耗时 2 分钟!
下面是他发给我的测试代码。
using System.Data.Common;
using System.Data.SQLite;
// 创建数据库文件
File.Delete("test1.db3");
SQLiteConnection.CreateFile("test1.db3");
DbProviderFactory factory = SQLiteFactory.Instance;
using (DbConnection conn = factory.CreateConnection())
{
// 连接数据库
conn.ConnectionString = "Data Source=test1.db3";
conn.Open();
// 创建数据表
string sql = "create table [test1] ([id] INTEGER PRIMARY KEY, [s] TEXT COLLATE NOCASE)";
DbCommand cmd = conn.CreateCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
// 添加参数
cmd.Parameters.Add(cmd.CreateParameter());
// 开始计时
Stopwatch watch = new Stopwatch();
watch.Start();
// 连续插入1000条记录
for (int i = 0; i < 1000; i++)
{
cmd.CommandText = "insert into [test1] ([s]) values (?)";
cmd.Parameters[0].Value = i.ToString();
cmd.ExecuteNonQuery();
}
// 停止计时
watch.Stop();
Console.WriteLine(watch.Elapsed);
}
加了几行代码后 (新增代码标记 "// <-------------------")。
using System.Data.Common;
using System.Data.SQLite;
// 创建数据库文件
File.Delete("test1.db3");
SQLiteConnection.CreateFile("test1.db3");
DbProviderFactory factory = SQLiteFactory.Instance;
using (DbConnection conn = factory.CreateConnection())
{
// 连接数据库
conn.ConnectionString = "Data Source=test1.db3";
conn.Open();
// 创建数据表
string sql = "create table [test1] ([id] INTEGER PRIMARY KEY, [s] TEXT COLLATE NOCASE)";
DbCommand cmd = conn.CreateCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
// 添加参数
cmd.Parameters.Add(cmd.CreateParameter());
// 开始计时
Stopwatch watch = new Stopwatch();
watch.Start();
DbTransaction trans = conn.BeginTransaction(); // <-------------------
try
{
// 连续插入1000条记录
for (int i = 0; i < 1000; i++)
{
cmd.CommandText = "insert into [test1] ([s]) values (?)";
cmd.Parameters[0].Value = i.ToString();
cmd.ExecuteNonQuery();
}
trans.Commit(); // <-------------------
}
catch
{
trans.Rollback(); // <-------------------
throw; // <-------------------
}
// 停止计时
watch.Stop();
Console.WriteLine(watch.Elapsed);
}
执行一下,耗时 0.2 秒。这差距是不是太大了点?
为什么只是简单启用了一个事务会有这么大的差距呢?很简单,SQLite 缺省为每个操作启动一个事务,那么原代码 1000 次插入起码开启了 1000 个事务,"事务开启 + SQL 执行 + 事务关闭" 自然耗费了大量的时间,这也是后面显示启动事务后为什么如此快的原因。其实这是数据库操作的基本常识,大家要紧记,不好的代码效率差的不是一点半点。
来源:https://blog.csdn.net/xiaohu_2012/article/details/16973025
C#,sqlite批量操作速度优化(插入1000条2分钟变0.2秒)相关推荐
- java mysql 快速插入1000w条数据_教你88秒插入1000万条数据到mysql数据库表
我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: ...
- 向MySQL创建的表中插入1000条测试数据
create procedure xunhuancharu() begin DECLARE i INT DEFAULT 1; WHILE (i <= 1000) DO INSERT INTO t ...
- MySQL 批量插入数据,单次插入多少条数据效率最高
文章目录 一.前言 二.批量插入前准备 1.插入到数据表的字段 2.计算一行字段占用的空间 3.在数据里做插入操作的时候,整体时间的分配 三.批量插入数据测试 1.SQL语句的大小限制 2.查看服务器 ...
- SQLite批量插入效率
一.循环单条数据插入 SQLite插入单条数据效率并不高,原因是: Because it does not have a central server to coordinate access, SQ ...
- Swift 中使用 SQLite——批量更新(事务处理)
本文是Swift 中使用 SQLite系列的收官之作,介绍一下在数据库中的批量更新. 事务 在准备做大规模数据操作前,首先开启一个事务,保存操作前的数据库的状态 开始数据操作 如果数据操作成功,提交事 ...
- php读sqlite速度,SQLite数据库操作速度和性能评测
SQLite 作为一个轻量级嵌入式数据库,还是非常好用的.雨痕极力推荐~~~~~~ 今天有个朋友测试 SQLite,然后得出的结论是:SQLite 效率太低,批量插入1000条记录,居然耗时 2 分钟 ...
- 教你急速快速批量插入1000万条数据到mysql数据库表面试题
急速快速批量插入1000万条数据到mysql数据库表面试题 教你急速快速批量插入1000万条数据到mysql数据库表&面试题 我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好 ...
- 批量往mysql里面插入1000万条数据_绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来...
我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: ...
- android sqlite批量操作,Android: SQLite批量插入数据的最佳实践
大家都知道,Android里数据库用的是SQLite.在实际开发过程中,我们有时候会遇到批量插入数据的场景.这篇文章给大家分享一个小技巧,让批量插入数据达到最快的目的. 首先,我先创建一个Table, ...
最新文章
- MongoDB数据库安装与连接
- 南京工业大学浦江学院计算机学院,招生季 叮~让你爱上南京工业大学浦江学院的若干个理由...
- Java千百问局部变量、类变量、实例变量有什么区别
- python app逆向_python之app逆向破解data参数中的PassWord DES加密无填充
- DP动态规划【专辑@AbandonZHANG】
- 笔记本键盘字母变数字解决方法
- 搭建gos_快速浏览gOS –但不要称其为Google
- java中import是什么意思_java中import关键字是什么意思
- PCB板上的字母代表哪些元器件?一文看全!
- 计算机文化基础课程实验,计算机文化基础课程实验.doc
- domoticz 使用esp8266通过mqtt控制灯开关
- 重装系统进入PE的快捷键大全
- wps时间戳转换成日期
- SpeechSynthesisUtterance文字转语音播报
- RISC-V 开发工具链的使用
- css(六)--css高级技巧
- 基于Java的服务器应用监控系统设计与实现
- 隐私泄露无孔不入?扫地机器人已成新型“窃听器”
- vue ts项目同时引入ant-design和element-ui,ts报错不能编译打包失败
- 京津冀计算机考研院校2021与2022招生人数对比