1. 程式人生 > 其它 >SqlSugar和Freesql 效能比較 .NET ORM

SqlSugar和Freesql 效能比較 .NET ORM

四種orm框架的對
1、什麼是ORM?
答:ORM(Object-relational mapping)即物件關係對映,是一種為了解決面向物件與關係資料庫存在的互不匹配的現象的技術。也就是說,ORM是通過使用描述物件和資料庫之間對映的元資料(對映檔案資訊),將程式中的物件自動持久化到關係資料庫中。說白了就是將相應的實體對映到相應的資料庫表,然後使用orm框架封裝好的api進行資料庫訪問,減少了自己寫資料庫訪問類的步驟。

2、ORM框架的優缺點是?

答:ORM框架的優點:(1)操作簡單,提高開發效率。(2)支援面向物件封裝。(3)可移植。(4)減少重複性程式碼

​ ORM框架的缺點:(1)處理多表聯查之類的查詢時,ORM的語法會變得很複雜。(2)執行效能較低(但現在有一些輕型ORM框架,效能接近原生SQL)。

2、四種框架的基本資訊對比如下表:
框架/對比屬性 SqlSugar Dos.ORM Freesql EFCodeFirst
支援資料庫型別 MySql、SqlServer、Sqlite、Oracle 、 postgresql MySql、SqlServer、Sqlite、Oracle 等資料庫 MySql、SqlServer、Sqlite、Oracle 、 postgresql MySql、SqlServer、Sqlite、Oracle 、 postgresql
支援的平臺版本 .net和net core .net和net core .net和net core .net和net core
團隊規模 公司性質 公司性質 個人 微軟
體積 895k(下載後package的大小) 607k(下載後package的大小) 558k(下載後package的大小) 17.8M
文件幫助 較全(install後,就可以直接使用了) 一般(但是很多細節的東西並沒有告知使用者,例如需要通過程式碼生成器生成的實體類才能與資料庫進行對映) 較全(install後,建立資料庫即可直接使用) 較全(無論是微軟官方還是百度谷歌,用的人比較多,遇到問題容易)
與資料庫互動方式 支援dbfirst、codefirst 支援dbfirst 支援dbfirst、codefirst 支援code first(當前使用的是code first,也可支援dbfirst)
學習成本 低 一般 低 較高(剛開始使用會遇到許多的bug,雖然網上都有解決方法,但是學習起來沒前幾種容易)
3、四種框架的耗時情況如下:
如下表格,展示的是四種ORM框架Crud的效能,其中,(1)增查刪改都是迴圈5次,每次增刪改1萬條資料,查詢是每次查詢10萬條資料,取5次的平均值;(2)批量增刪改都是迴圈5次,每次增刪改10萬條資料,取5次平均值:

類別/框架名稱 Freesql(單位:秒) DOS.ORM(單位:秒) EF(Code First)(單位:秒) SqlSugar(單位:秒)
新增(Insert) 13.9063 13.5712 273.563 12.4268
刪除(Delete) 13.6688 13.3366 65.1328 12.4202
修改(Update) 14.3704 14.3306 54.021 12.084
查詢(Select) 1.7502 0.2308 0.5486 0.1416
批量新增(BulkInsert) 1.4382秒 20.6162秒 27.6674秒 1.4286秒
批量修改(BulkUpdate) 3.5988秒(不足以用來參照,看下面註解) 22.6556秒 22.1634秒 3.8188秒
批量刪除(BulkDelete) 0.7504秒(不足以用來參照,看下面註解) 只能批量刪除2009條,超過就報錯 20.336秒 0.7034秒
由上表可知,各種框架CRUD的效能如下(由快到慢):

(1)迴圈CRUD操作的效能如下:

​ 新增:SqlSugar>DOS.ORM>Freesql>EF

​ 刪除:SqlSugar>DOS.ORM>Freesql>EF

​ 修改:SqlSugar>DOS.ORM>Freesql>EF

​ 查詢:SqlSugar>DOS.ORM>EF>Freesql

綜上可知:SqlSugar框架的CRUD效能是最高的,其中EF除了查詢比較快之外,刪改所花費的時間都是其他三種框架的4~5倍,而新增就是20倍左右!

(2)迴圈批量CRUD的效能如下:

​ 批量新增:Freesql=SqlSugar>DOS.ORM>EF

​ 批量修改:Freesql=SqlSugar>EF>DOS.ORM

​ 批量刪除:Freesql=SqlSugar>EF

註解1:Freesql是有批量新增的方法BulkInsert,故其批量新增操作與其他框架一樣。但是,Freesql沒有批量修改、刪除的方法,如下程式碼片段:

//下面的n表示1~5,是迴圈執行的次數,在上面的Insert步驟中分配插入了1萬條"Freesql測試的資料1"、"Freesql測試的資料2"、"Freesql測試的資料3"、"Freesql測試的資料4"、"Freesql測試的資料5"
//Freesql只能通過lamdba表示式匹配到的資料進行刪改,而不能直接在update()中新增一個list
context.Update<ORMTest>(a => a.Name == "Freesql測試的資料" + n, a => new ORMTest()
{
Name = "Freesql修改的資料" + n
});
context.Delete<ORMTest>(a => a.Name == "Freesql修改的資料" + n);
註解2:DOS.ORM批量刪除超過2009條資料時就會報錯,如下圖:

綜上,只有SqlSugar涵蓋的方法比較多,而且速度也較快!

4、四種框架都支援哪些功能?
功能/框架 Freesql DOS.ORM EF SqlSugar
增刪查改 支援 支援 支援 支援
批量增刪改 支援 支援 支援 支援
事務、儲存過程、日誌 支援 支援 支援 支援
lamdba、執行SQL 支援 支援 支援 支援
linq 不支援 不支援 支援 不支援
多表查詢、分組查詢 支援 支援 支援 支援
全域性過濾器 不支援 不支援 支援 支援
答:四種框架都支援:

基本查詢、多表查詢、分組查詢、批量增刪改操作、儲存過程、事務、執行SQL、日誌等功能。

5、就個人使用而言,比較推薦哪個框架?
答:個人比較推薦SqlSugar,原因如下:

(1)只要下載了SqlSugar包後,就可以直接按照官網的例子進行編碼,日誌跟蹤方面我認為是最簡單已用的,且文件寫得比較好、可由程式碼生成資料庫,可以快速上手。

(2)Freesql與SqlSugar差不多,但是由於我覺得SqlSugar日誌跟蹤方面做得比較好且可以由程式碼生成資料庫,且Freesql對批量操作的支援不是很好,只能批量新增(且沒有返回值),不能批量刪除、修改,所以我才選擇SqlSugar:

(3)Dos.ORM是這三個框架裡面最不好上手,***不能***直接自己建立類檔案,而是需要下載官網推薦的***程式碼生成器***去生成相應的類,然後才能進行資料庫的訪問,否則插入刪除等操作都會報錯,所以就個人而言,不推薦用這個,認為學習成本比其他兩個高。

(4)EF是重量級ORM框架,上面三種框架有的功能它都有,且有微軟這個大廠在背後支撐,百度谷歌可以輕易搜尋到大多數問題的解決方法,一開始,只要修改類結構,容易遇到與"dbo.Migrationary"相關的錯誤(這是需要了解codefirst資料庫遷移方面的知識,可通過這邊文章瞭解https://blog.csdn.net/xwnxwn/article/details/90171519),如果想用的功能不多,且不想框架太大的話,就還是推薦上面三種。

(5)四種框架中,SqlSugar進行CRUD的效能最高,而EF最慢。

一份耕耘,一份收穫,付出就有回報永不遭遇過失敗,因我所碰到的都是暫時的挫折