一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術(shù)及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術(shù)|

服務器之家 - 數(shù)據(jù)庫 - Sqlite - SQLite速度評測代碼

SQLite速度評測代碼

2020-06-01 17:27SQLite教程網(wǎng) Sqlite

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

今天有個朋友測試 SQLite,然后得出的結(jié)論是:SQLite 效率太低,批量插入1000條記錄,居然耗時 2 分鐘!
下面是他發(fā)給我的測試代碼。我暈~~~~~~

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

// 開始計時
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();
}

// 停止計時
watch.Stop();
Console.WriteLine(watch.Elapsed);
}

哎~~~~ 一個常識性的錯誤,我加幾行代碼 (新增代碼標記 "// <-------------------")。

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

// 開始計時
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; // <-------------------
}

// 停止計時
watch.Stop();
Console.WriteLine(watch.Elapsed);
}

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

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

延伸 · 閱讀

精彩推薦
  • SqliteSQLite中重置自動編號列的方法

    SQLite中重置自動編號列的方法

    這篇文章主要介紹了SQLite中重置自動編號列的方法,本文講解了3種情況和其對應解決方法,需要的朋友可以參考下 ...

    dodo84492020-06-08
  • SqliteSQLite 錯誤碼整理

    SQLite 錯誤碼整理

    這篇文章主要介紹了SQLite 錯誤碼,方便大家在開發(fā)過程中快速解決問題 ...

    SQLite教程網(wǎng)5532020-06-06
  • Sqlite基于sqlite特殊字符轉(zhuǎn)義的實現(xiàn)方法

    基于sqlite特殊字符轉(zhuǎn)義的實現(xiàn)方法

    本篇文章是對sqlite特殊字符轉(zhuǎn)義的實現(xiàn)方法進行了詳細的分析介紹,需要的朋友參考下 ...

    sqlite數(shù)據(jù)庫教程網(wǎng)4132020-06-04
  • SqliteSQLite中的WAL機制詳細介紹

    SQLite中的WAL機制詳細介紹

    這篇文章主要介紹了SQLite中的WAL機制詳細介紹,本文講解了什么是WAL、WAL如何工作、WAL的優(yōu)點與缺點、WAL引入的兼容性問題、WAL引入的性能問題等內(nèi)容,需要...

    dodo83402020-06-08
  • SqliteSQLite速度評測代碼

    SQLite速度評測代碼

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

    SQLite教程網(wǎng)5832020-06-01
  • Sqlite詳解SQLite中的查詢規(guī)劃器

    詳解SQLite中的查詢規(guī)劃器

    這篇文章主要介紹了詳解SQLite中的查詢規(guī)劃器,SQLite是一個開源的嵌入式數(shù)據(jù)庫,需要的朋友可以參考下...

    SQLite教程網(wǎng)8892021-10-25
  • SqliteSQLite 入門教程三 好多約束 Constraints

    SQLite 入門教程三 好多約束 Constraints

    在上一篇隨筆的結(jié)尾,我提到了SQLite的約束, 但是在那里我把它翻譯成了限定符,不太準確,這里先更正一下,應該翻譯成約束更貼切一點。 那么什么是...

    SQLite入門教程4572020-06-05
  • SqliteSQLite 內(nèi)存數(shù)據(jù)庫學習手冊

    SQLite 內(nèi)存數(shù)據(jù)庫學習手冊

    這篇文章主要介紹SQLite 內(nèi)存數(shù)據(jù)庫的使用方法, 需要的朋友可以參考下 ...

    SQLite教程網(wǎng)3292020-06-06
主站蜘蛛池模板: 四虎影视永久在线精品免费 | 操动漫美女视频 | 四虎音影 | 欧美男同互吃gay老头 | 日韩成a人片在线观看日本 日韩不卡一区二区 | 我们日本在线观看免费动漫下载 | 日韩欧美色| 午夜影院一区二区三区 | 我强进了老师身体在线观看 | 亚洲国产AV一区二区三区四区 | 国产精品香蕉在线观看不卡 | 四虎1515hhc0m| 99国产牛牛视频在线网站 | 国产精品亚洲午夜不卡 | 国内久久 | 99爱免费视频| 色妞女女女女女bbbb | 手机免费在线视频 | 欧美整片在线 | 91欧洲在线视精品在亚洲 | 色淫影院 | 日本无遮挡吸乳视频看看 | 超级乱淫 不详 | 91制片在线观看 | 久久青青草原精品国产软件 | 日本色午夜 | 我的男友是消防员在线观看 | 嘿嘿午夜 | 国产成人啪精品视频站午夜 | 亚洲国产精品热久久 | 波多野结衣在线中文 | 91天堂在线视频 | julia ann多人乱战 | 日韩国产欧美成人一区二区影院 | 男生的j桶女人屁免费视频 男生操男生 | 美国雪白人妖sarina | 日本精品一区二区三区 | 久久精品嫩草影院免费看 | 日本欧美一二三区色视频 | 无遮18禁在线永久免费观看挡 | 精品国产品在线18年 |