繁体   English   中英

使用常规LINQ创建已编译的查询linq和性能问题

[英]Creating a compiled query linq and performance issues with regular LINQ

我目前有一个查询,如下所示:

 using (var ctx = new myEntities())
 {
    ctx.Configuration.LazyLoadingEnabled = false;
    ctx.Configuration.ProxyCreationEnabled = false;
    ctx.Database.CommandTimeout = 200;
    competitors = DBRetry.Do(() => ctx.SearchedUsers.AsNoTracking().Where(x => x.InQueue == true).OrderBy(x => x.LastUpdatedAt).Take(2000).ToList(), TimeSpan.FromSeconds(1));

 }

由于其他用户/应用程序经常使用“ SearchedUsers”表,因此在对该数据库进行查询时,我通常会遇到速度慢/死锁的情况。

我已经做了一些研究来通过关闭延迟加载,对查询使用AsNoTracking()技巧并在对数据库执行查询时增加命令超时来加快此过程,但是有时仍然会发生死锁...

所以我的问题是:

  1. 我如何将这个查询变成一个已编译的查询
  2. 与常规查询相比,执行编译查询时可以期待多少性能?

有人可以帮助我实施一个已编译的查询解决方案吗?

在数据库中创建查询作为视图。 在查询或“未提交的隔离级别”上设置NOLOCK提示。 然后将模型对象设置为表的视图。

编译查询将有助于提高性能,但并不能帮助您锁定记录。

另外,为什么要使用200毫秒的CommandTimeout? 如果您对此进行调整会怎样?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM