.NET 6下,MySQL第三方ORM性能測試,EFCore、SqlSugar、Zack、Z.EntityFramework


ORM說明:

  • EFCore 6.0.0(Microsoft.EntityFrameworkCorePomelo.EntityFrameworkCore.MySql(微軟原生,性能有驚喜,請看下文)
  • SqlSugarCore 5.0.4.7(國內主流第三方ORM)
  • Z.EntityFramework.Extensions.EFCore 6.13.2 (需收費,增加Bulk操作)
  • Z.EntityFramework.Plus.EFCore 6.13.2(免費,沒有Bulk操作)
  • Zack.EFCore.Batch.MySQL.Pomelo_NET6 6.0.4(國內主流第三方ORM)
  • EFCore.BulkExtensions(不支持MySQL)
  • Dapper(不參與測試,因為查詢性能跟SqlSugar差不多,但是其他功能集成度沒SqlSugar高,且編寫原生sql對於項目的可讀性太差)

 

版本說明:

  • .NET 6控制台
  • MySQL社區版:8.0.27
  • Windows 11
  • 第三方包版本:

 

  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.0" />
    <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="6.0.0" />
    <PackageReference Include="SqlSugarCore" Version="5.0.4.7" />
    <PackageReference Include="Z.EntityFramework.Extensions.EFCore" Version="6.13.2" />
    <PackageReference Include="Z.EntityFramework.Plus.EFCore" Version="6.13.2" />
    <PackageReference Include="Zack.EFCore.Batch.MySQL.Pomelo_NET6" Version="6.0.4" />
  </ItemGroup>

 

一、批量插入:

耗時:Zack < SqlSugar.Fastest < Z.EF.Ext < SqlSugar < EFCore

說明:EFCore慢是因為插入動作是逐條執行的,且會返回主鍵ID,日常少數量的插入大可以放心用EFCore。

Zack和SqlSugar.Fastest都需要開啟MySQL的local_infile=ON,因此性能達到極限。但是除了爬蟲、數據庫遷移一般用不上這么大批量的插入,因此SqlSugar的常規批量插入足以解決問題。

批量插入前,先執行以下代碼,否則插入10萬條會報錯:set global max_allowed_packet = 2*1024*1024*10

SqlSugar需要注意坑還是有的,例如這個版本的Fastest的bool類型就強制為1。

 



 

二、查詢:

相比於批量插入、更新和批量刪除,更常用的應該是查詢功能,查詢目前只測試EFCore和SqlSugar

測試時,用戶表數據300萬。

1、直接查詢;

少量數據來說,時間差距微不足道,意想不到的是,EFCore(不跟蹤)的效率比SqlSugar還要高

不過SqlSugar的優勢在於查出來后,可以通過Updateable直接更新實體

 



 

2、分頁和帶子類查詢;

 帶條件的分頁查詢是最常見的業務,對於非常復雜,多條件的查詢語句,按照我個人經驗,如果無法實現查詢總行數和查詢數據一起執行,那么查詢總數前一定不能Order和Select,否則會非常影響效率;

值得注意的是,SqlSugar的官網說分頁查詢是一次完成的,但是輸出查詢語句發現還是分兩次:

 

 



 

三、批量更新:

批量更新和刪除沒什么好說的,畢竟生成的都是直接update的語句,喜歡用哪個就哪個

需要注意的是,Zack和SqlSugar是直接值追加的,批量刪除也不做測試了,意義不大

 

 

 

 


免責聲明!

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



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