请帮助我优化这个Linq语句
本文关键字:Linq 语句 优化 帮助 | 更新日期: 2023-09-27 18:10:54
可以帮助我优化以下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
之前,以减少按语句参与订单的记录数。像
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执行:关闭nHibernat日志记录
请告诉我们重点是什么。
谨致问候,Michael