博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(C#版本)提升SQlite数据库效率——开启事务,极速插入数据,3秒100万,32秒1000万条数据...
阅读量:7112 次
发布时间:2019-06-28

本文共 2030 字,大约阅读时间需要 6 分钟。

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 Program10     {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 }

 不开启事务,插入1k行

 

 开启事务,插入100w行

 

转载于:https://www.cnblogs.com/zhaoliankun/p/9167219.html

你可能感兴趣的文章
[2013EJDE]Osgood type regularity criterion for the $3$D Newton-Boussinesq equations
查看>>
黄疸案
查看>>
[转载]ASP.NET伪静态页面的实现和伪静态在IIS7.0中的配置
查看>>
【转】Android源代码编译命令m/mm/mmm/make分析--不错
查看>>
【SQL】SQL中笛卡尔积、内连接、外连接的数据演示
查看>>
HTTP解析
查看>>
MemCache超详细解读
查看>>
python numpy 教程
查看>>
手机web如何实现多平台分享
查看>>
策略模式和观察者模式
查看>>
详解CALayer 和 UIView的区别和联系
查看>>
eclipse中报错:java.lang.OutOfMemoryError: Java heap space
查看>>
Ubuntu 16.04 grub rescue 模式下修复 grub
查看>>
【Spring】24、<load-on-startup>0</load-on-startup>配置
查看>>
L0 Regularization
查看>>
使用JDBC向Kudu表插入中文数据乱码(转载)
查看>>
spf13-vim安装与使用
查看>>
字体颜色代码表
查看>>
hdu 2156 分数矩阵
查看>>
android SQLite数据库应用于草稿箱
查看>>