麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久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ā)表
主站蜘蛛池模板: 91久久久久久久久久久久久 | 成人毛片免费看 | 在线成人免费观看视频 | 91看片片| 九九午夜| 91精品国产一区二区三区四区在线 | 久久蜜臀一区二区三区av | 欧美巨根| 久久午夜神器 | 久久久经典视频 | 欧美交在线 | a视频在线免费观看 | 主人在调教室性调教女仆游戏 | chinese乱子伦xxxx国语对白 | 毛片小网站 | 午夜精品小视频 | 黄在线看| 久久草在线看 | 久久免费视频一区 | 中文字幕在线观看日韩 | 国产免费一区二区三区网站免费 | 沉沦的校花奴性郑依婷c到失禁 | 五月婷婷第四色 | 一级免费 | 国产精品久久久久久一区二区三区 | 天海翼四虎精品正在播放 | 黄色免费在线视频网站 | 成人超碰 | 一级性色 | 国产精品刺激对白麻豆99 | 成年人免费高清视频 | 欧美a∨一区二区三区久久黄 | 国产精品成人久久 | 毛片免费大全短视频 | 精国品产一区二区三区有限公司 | 久久久久久久久久久久久久国产 | 中文字幕一区在线观看视频 | 性爱视频在线免费 | a一级黄色大片 | 91成人久久 | 国产免费高清在线视频 |