麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數(shù)據(jù)庫 > SQLite > 正文

SQLite速度評(píng)測(cè)代碼

2020-01-25 19:30:33
字體:
供稿:網(wǎng)友

SQLite 作為一個(gè)輕量級(jí)嵌入式數(shù)據(jù)庫,還是非常好用的。雨痕極力推薦~~~~~~

今天有個(gè)朋友測(cè)試 SQLite,然后得出的結(jié)論是:SQLite 效率太低,批量插入1000條記錄,居然耗時(shí) 2 分鐘!

下面是他發(fā)給我的測(cè)試代碼。我暈~~~~~~

using System.Data;

using System.Data.Common;

using System.Data.SQLite;

// 創(chuàng)建數(shù)據(jù)庫文件

File.Delete("test1.db3");

SQLiteConnection.CreateFile("test1.db3");

DbProviderFactory factory = SQLiteFactory.Instance;

using (DbConnection conn = factory.CreateConnection())

{

// 連接數(shù)據(jù)庫

conn.ConnectionString = "Data Source=test1.db3";

conn.Open();

// 創(chuàng)建數(shù)據(jù)表

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();

// 添加參數(shù)

cmd.Parameters.Add(cmd.CreateParameter());

// 開始計(jì)時(shí)

Stopwatch watch = new Stopwatch();

watch.Start();

// 連續(xù)插入1000條記錄

for (int i = 0; i < 1000; i++)

{

cmd.CommandText = "insert into [test1] ([s]) values (?)";

cmd.Parameters[0].Value = i.ToString();

cmd.ExecuteNonQuery();

}

// 停止計(jì)時(shí)

watch.Stop();

Console.WriteLine(watch.Elapsed);

}

哎~~~~ 一個(gè)常識(shí)性的錯(cuò)誤,我加幾行代碼 (新增代碼標(biāo)記 "// <-------------------")。

using System.Data;

using System.Data.Common;

using System.Data.SQLite;

// 創(chuàng)建數(shù)據(jù)庫文件

File.Delete("test1.db3");

SQLiteConnection.CreateFile("test1.db3");

DbProviderFactory factory = SQLiteFactory.Instance;

using (DbConnection conn = factory.CreateConnection())

{

// 連接數(shù)據(jù)庫

conn.ConnectionString = "Data Source=test1.db3";

conn.Open();

// 創(chuàng)建數(shù)據(jù)表

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();

// 添加參數(shù)

cmd.Parameters.Add(cmd.CreateParameter());

// 開始計(jì)時(shí)

Stopwatch watch = new Stopwatch();

watch.Start();

DbTransaction trans = conn.BeginTransaction(); // <-------------------

try

{

// 連續(xù)插入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; // <-------------------

}

// 停止計(jì)時(shí)

watch.Stop();

Console.WriteLine(watch.Elapsed);

}

執(zhí)行一下,耗時(shí) 0.2 秒。這差距是不是太大了點(diǎn)?

為什么只是簡(jiǎn)單啟用了一個(gè)事務(wù)會(huì)有這么大的差距呢?很簡(jiǎn)單,SQLite 缺省為每個(gè)操作啟動(dòng)一個(gè)事務(wù),那么原代碼 1000 次插入起碼開啟了 1000 個(gè)事務(wù),"事務(wù)開啟 + SQL 執(zhí)行 + 事務(wù)關(guān)閉" 自然耗費(fèi)了大量的時(shí)間,這也是后面顯示啟動(dòng)事務(wù)后為什么如此快的原因。其實(shí)這是數(shù)據(jù)庫操作的基本常識(shí),大家要緊記,不好的代碼效率差的不是一點(diǎn)半點(diǎn)。

上一篇:SQLite優(yōu)化方法

下一篇:返回列表

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久久久亚洲视频 | xxxxxx视频 | 国产毛片自拍 | 欧美日韩免费一区 | 国产日本在线播放 | 男女视频免费看 | 日本免费a∨ | 国产精品一区二区三区99 | 日本高清视频网站www | 国产羞羞视频 | 天天看夜夜爽 | 极品国产91在线网站 | 中国a级黄色片 | 久久精品99国产国产精 | www.17c亚洲蜜桃 | 中文字幕电影免费播放 | 国产精品久久av | 成年人在线免费 | 精品国产一区二区三 | 欧美hdfree性xxxx| 深夜精品福利 | 久久久久亚洲a | 日本在线国产 | 2023av在线视频 | 草b视频在线观看 | 亚洲成a| 新久草在线视频 | 成人午夜精品 | 99精品视频在线导航 | 亚洲伊人色欲综合网 | 黄网站免费观看视频 | 亚洲片在线 | 国产精品久久久久久影视 | 女女久久| 国产精品一区二区三区在线 | 欧美顶级毛片在线播放小说 | 久久一区三区 | 欧美激情精品久久久久久久久久 | 黄色毛片一级 | 日韩精品一二三 | av手机在线电影 |