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

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 }

猜你喜欢

转载自www.cnblogs.com/zhaoliankun/p/9167219.html