zoukankan      html  css  js  c++  java
  • .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是直接值追加的,批量删除也不做测试了,意义不大

     

    Empower every person and every organization achieve more in my blog.
  • 相关阅读:
    BC高精确度函数使用。
    thinkPHP中_initialize方法实例分析
    MySQL中concat函数
    使用docker打造spark集群
    zhihu spark集群,书籍,论文
    Windows下安装使用curl命令
    数据可视化的优秀入门书籍有哪些,D3.js 学习资源汇总
    2015互联网+影响力报告发布
    The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
    centos linux中怎么查看和修改计算机名/etc/sysconfig/network
  • 原文地址:https://www.cnblogs.com/loda7023link/p/15680478.html
Copyright © 2011-2022 走看看