zoukankan      html  css  js  c++  java
  • EF core 性能优化

    1.使用 EF.Functions.xxx 进行查询

    (1).使用 EF.Functions.Like进行模糊查询要比 StartsWith、Contains 和 EndsWith 方法生成的SQL语句性能更优。

    A. Contains语句,生成的sql为:

      var data3 = dbContext.T_UserInfor.Where(u => u.userName.Contains("p")).ToList();

    用的是charindex

    B. EF.Functions.Like语句生成的sql为:(Like搭配SQL查询的通配符使用)

      var data1 = dbContext.T_UserInfor.Where(u => EF.Functions.Like(u.userName, "%p%")).ToList();
      //或者
      var data2 = (from p in dbContext.T_UserInfor
                   where EF.Functions.Like(p.userName, "%p%")
                   select p).ToList();

    用的是Like

    PS:在传统的.Net中,还有种用法 SqlMethods,详见:https://www.cnblogs.com/yaopengfei/p/11805980.html

    (2).还有EF.Functions.DateDiffDay (DateDiffHour、DateDiffMonth),求天、小时、月之间的数量

    PS:在EF Core中StartsWith、Contains和EndsWith模糊查询实际分别被解析成为Left、CharIndex和Right,而不是Like,而EF.Functions.Like会解析成Like语句。

    详见:https://www.cnblogs.com/tdfblog/p/entity-framework-core-like-query.html

    2、添加Z.EntityFramework.Plus.EFCore依赖使用一些特殊的语法

          这个是免费的,但 Z.EntityFramework.Plus的一些批量数据操作的包是收费的

    (1) EFCore删除必须先查询再删除,优化后可直接删除:context.User.Where(t => t.Id == 100).Delete();

    (2)优化更新语句:context.User.Where(t => t.Id == 4).Update(t =>new User() { NickName = "2224114" ,Phone = "1234"} );

    3、正确使用Find(id=10)来代替FirstOrDefault(t=>t.id=10)

    Find会优先查询缓存,当前面已经查询过这条数据的时候使用,而FirstOrDefault每次都会查询数据库;当id=10的数据被修改之后,find查出的数据是新数据。

    4、禁用实体追踪

    当我们从数据库中查询出数据时,上下文就会创建实体快照,从而追踪实体。在调用 SaveChanges 时,实体有任何更改都会保存到数据库中。

    但是当我们只需要查询出实体而不需要修改时(只读),实体追踪就没有任何用途了。这时我们就可以调用 AsNoTracking 获取非追踪的数据,这样可以提高查询性能。具体代码如下:

    var users = db.Users.AsNoTracking().ToList();

    注:如果是多表查询可以在查询前

    db.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;

    这样就把所有表查询设置成了非追踪状态

    5、判断查询出的列表是否有值时,使用 .Any(),尽量不使用 .Count(); .FirstOrDefault()

  • 相关阅读:
    Python从菜鸟到高手(2):清空Python控制台
    Python爬虫黑科技(经验)
    Python黑科技:6行代码轻松搭建FTP服务器
    Python黑科技:FuckIt.py
    Python黑科技:在家远程遥控公司电脑,python+微信一键连接!
    Python黑科技 | Python中四种运行其他程序的方式
    python3.x使用cxfreeze将.p打包成.exe
    【python 应用之四】提升 Python 运行性能的 7 个习惯
    JSF标签之f:facet 的使用方法
    windows快捷键之打开网络连接
  • 原文地址:https://www.cnblogs.com/qingheshiguang/p/13559561.html
Copyright © 2011-2022 走看看