如何提高效率SQLITE 大数据量操作效率

今天有个朋友测试 SQLite,然后得出的结论是:SQLite 效率太低,批量插入1000条记录,居然耗时 2 分钟!

using System.Data;
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;
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://www.cnblogs.com/zeping/archive/2011/04/07/2007589.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/410652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vc6开发一个抓包软件_惊奇软件[21]:这是一个程序员开发的背单词网站,可好用了!...

惊奇软件未经授权禁止转载正文---------------------------------哔哩哔哩小破站的UP主们就是厉害......就在前几天&#xff0c;小编我想找一款背单词的软件(某百词用的有点腻)&#xff0c;想到哔哩哩哩上的朋友们都比较年轻&#xff0c;喜欢学习&#xff0c;我就上哔哩哔哩搜索…

[html] 怎样使用iframe刷新父级页面?

[html] 怎样使用iframe刷新父级页面&#xff1f; //在父页面中window.addEventListener("message",function(e){if(e.data.reload){winodw.location.reload()}}, false);//在子页面中window.parent.postMessage({reload:true})个人简介 我是歌谣&#xff0c;欢迎和大…

执行计划中的参数解释

执行计划中的各个参数解释&#xff1a; 一、Recursive calls &#xff08;递归调用&#xff09; 1、参考&#xff1a;Oracle Database Reference, 10g Release 2 (10.2).pdf第916页 Number of recursive calls generated at both the user and system level. Oracle maintains …

java jsonobject_Java实现QQ登录

准备工作1. 云服务器2. 备案的域名3. 本地调试需要修改hosts文件&#xff0c;将域名映射到127.0.0.1一、申请QQ互联&#xff0c;并成为开发者QQ互联&#xff1a;QQ互联官网首页登录后&#xff0c;点击头像&#xff0c;进入认证页面&#xff0c;填写信息&#xff0c;等待审核。审…

周至四中计算机老师,周至县第四中学顺利承办周至县 “教育信息化技术与教学课堂深度融合交流研讨会”...

原标题&#xff1a;周至县第四中学顺利承办周至县 “教育信息化技术与教学课堂深度融合交流研讨会”5月22日&#xff0c;周至县 “教育信息化技术与教学课堂深度融合交流研讨会”在我校举行&#xff0c;周至县教科局党委书记、局长张武祥、副局长尚雷、教研室书记杨正良、电教中…

常规dll 的接口函数定义+客户端程序接口函数导入

--> blog 常规dll 的接口函数定义extern "C" __declspec(dllexport) int addcart_Click(LPCTSTR lpszInput, LPTSTR lpOutput){常规dll 的接口函数实现extern "C" __declspec(dllimport) int addcart_Click(LPCTSTR lpszInput, LPTSTR lpOutput){转载于…

bin文件怎么转换成文本文档_Python脚本4:根据txt文本,批量创建文件夹

背景&#xff1a;深度学习图像分类的时候&#xff0c;有许多的标签类。1000个标签就需要创建1000个文件夹&#xff0c;文件夹里面放入对应的图像。不可能一个一个右击创建文件夹&#xff0c;所以有了今天的脚本。根据txt文本每一行的类别&#xff0c;创建文件名为类别的文件夹。…

如何停止运行在服务器的项目,怎么启动和停止服务器

弹性云服务器 ECS弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器&#xff0c;帮助用户打造可靠、安全、灵活、高效的应用环境&#xff0c;确保服务持久稳定运行&#xff0c;提升运维效率三年低至5折&#xff0c;多种配置可选了解详情用户数据注…

安装应用程序时,提示以前的某个程序安装挂起的解决方法

&#xfeff;在安装应用程序的时候出现这个问题&#xff0c;用下面的办法就可以解决。 打开注册表编辑器&#xff08;开始->运行->regedit&#xff09;&#xff0c;在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager中找到PendingFileRenameOperat…

Pro ASP.NET 4 CMS

Pro ASP.NET 4 CMS转载于:https://www.cnblogs.com/gavinhughhu/archive/2010/07/15/1777714.html

电脑home键在哪_电脑键盘各键的名称及使用方法

电脑键盘各键的名称及使用方法如下&#xff1a;1. Tab键&#xff1a;表格键&#xff0c;是baiTable的缩写&#xff0c;中文意思是表格。在电脑中的应用主要是在文字处理软件里(如Word)起到等距离移动的作用。2、Esc键&#xff1a;退出键&#xff0c;是Escape的缩写&#xff0c;…

ajax加载vue数据,详解使用Vue.Js结合Jquery Ajax加载数据的两种方式

整理文档&#xff0c;搜刮出一个使用vue.js结合jquery ajax加载数据的两种方式的代码&#xff0c;稍微整理精简一下做下分享。废话不多说&#xff0c;直接上代码html代码demo{{message }}测试jquery加载数据{{data.name}}{{data.url}}{{data.country}}js代码/*** created by se…

程序员如何跟领导提离职_员工辞职不交接工作被领导怒怼:我不批离职,跟你耗着,结果蒙了...

阅读本文前&#xff0c;请您先点击上面的“蓝色字体”&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到文章了。每天都会有分享&#xff0c;都是免费订阅&#xff0c;请您放心关注。注&#xff1a;本文转载自网络&#xff0c;不代表本平台立场&#xff0c;仅供…

Silverlight 5 Beta新特性[4]文本缩进控制

持续带来Silverlight 5 Beta新特性的更新.在Silverlight 5 Beta版本对文本的处理能力做了真正的改进.其中从官方Silverlight 5 Beta Futurez中提到两个主要改善地方 翻译整理如下: Silverlight 5 Beta Text&#xff1a; …

编译器的2点优化

优化1 对于byte/short/char三种类型来说&#xff0c;如果右侧赋值的数值没有超过范围&#xff0c;那么javac编译器将会自动隐含地为我们补上一个(byte)(short)(char)。 如果没有超过左侧的范围&#xff0c;编译器补上强转。如果右侧超过了左侧范围&#xff0c;那么直接编译器报…

zoj 1115 Digital Roots

求各数位之和&#xff1b; 运用弃九法可以很快解出&#xff0c;但一开始没想到出入的会是字符串&#xff0c;WA了几次&#xff0c; AC代码如下 #include"iostream" #include"string" using namespace std; int main() {string str;while(cin>>str,st…

erp系统服务器都是维护些什么意思,erp系统维护服务器维护管理文档.doc

erp系统维护服务器维护管理文档ERP系统机箱及服务器管理维护文档page 4ERP系统机箱及服务器管理维护文档作者:数据技术组创建日期:2013-05-08修改日期:版本:1.0目录toc \o "1-3" 目录 PAGEREF _Toc295915832 \h 2HYPERLINK \l "编写说明" 编写说明 PAGEREF…

excel冻结窗口_excel成绩表怎么固定表头或者某一行?

当浏览成绩表时&#xff0c;很多人都会有这种困扰&#xff0c;就是好不容易找到自己的名字后&#xff0c;却又要往上翻看一下这个成绩对应的科目是什么&#xff0c;才能知道自己的各科成绩分别是多少。怎样才能固定表头或者某一行&#xff0c;不用来回浏览就可以轻松看到自己的…

常用的服务器系统,常用的服务器操作系统

常用的服务器操作系统 内容精选换一换云耀云服务器(Hyper Elastic Cloud Server&#xff0c;HECS)是可以快速搭建简单应用的新一代云服务器&#xff0c;具备独立、完整的操作系统和网络功能。提供快速应用部署和简易的管理能力&#xff0c;适用于网站搭建、开发环境等低负载应用…

Unity C#笔记 协程详解(转)

目录 什么是协程多线程协程 协程的使用场景协程使用示例Invoke的缺陷协程语法 开启协程终止协程挂起协程的执行原理什么是协程 在Unity中&#xff0c;协程&#xff08;Coroutines&#xff09;的形式是我最喜欢的功能之一&#xff0c;我都会使用它来控制需要定时的。 协同程序&a…