繁体   English   中英

请帮助我优化此Linq语句

[英]Please help me optimizing this Linq statement

可以帮助我优化以下LINQ语句。 我正在使用NHibernate作为ORM。 该语句需要花费超过一分钟的时间来执行。 不需要那么多时间。

 var inValidIntroductionDates = environment.IntroductionDateInfo.IntroductionDateDetails
                                .OrderByDescending(x => x.ApplicationDate)
                                .Where(x => x.VaccineDetail.Id == vaccine.Id &&
                                            x.ViewInfo.Id == viewInfoDetail.ViewInfo.Id &&
                                            x.MasterForecastInfo.Id == scenarioId &&
                                            x.IsIntroductionDateValid == false)
                                .ToList();

谢谢

Where子句OrderByDescending之前,以减少参与order by语句的记录数。 喜欢

var inValidIntroductionDates = environment.IntroductionDateInfo.IntroductionDateDetails
                               .Where( x => x.VaccineDetail.Id == vaccine.Id && 
                                     x.ViewInfo.Id == viewInfoDetail.ViewInfo.Id && 
                                     x.MasterForecastInfo.Id == scenarioId && 
                                     x.IsIntroductionDateValid == false)
                                .OrderByDescending(x => x.ApplicationDate)
                                .ToList();

你也可以改变

 x.IsIntroductionDateValid == false

 !x.IsIntroductionDateValid 

但这不会提高性能。 只是一个准备选项。

var inValidIntroductionDates = environment.IntroductionDateInfo.IntroductionDateDetails.Where(
                        x => x.VaccineDetail.Id == vaccine.Id && x.ViewInfo.Id == viewInfoDetail.ViewInfo.Id && x.MasterForecastInfo.Id == scenarioId && x.IsIntroductionDateValid == false).OrderByDescending(x => x.ApplicationDate).ToList();

首先找到,然后订购

要考虑的一些事情:

  • 请附加一个探查器到您的数据库,并告诉我们如何将确切的语句发送到数据库
  • 找出语句执行缓慢还是nHibernate处理花费时间
  • 如果是数据库查询:针对语句进行优化(例如,索引,执行计划等)
  • 如果执行太多查询:与n + 1战斗
  • 如果是nHibernate执行:关闭nHibernate日志记录

请让我们知道重点。

问候,迈克尔

暂无
暂无

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

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