(C#版本)提升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 }

 不開啟事務,插入1k行

 

 開啟事務,插入100w行

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM