我们如何优化此 linq 到实体查询以减少响应时间?
-
19-09-2019 - |
题
IQueryable<WebEvent> mySearch =
eventDC.GetBooks()
.Where(p => p.Price.Any(d => d.EventDatetime.Month == fromDate.Month
&& d.EventDatetime.Year == fromDate.Year))
.WithGroup(groupId)
.OrderBy(p => p.Price.Where(r => r.Datetime >= fromDate)
.OrderBy(q => q.Datetime)
.FirstOrDefault().Datetime);
List<Book>ventsList = mySearch.ToList<Book>();
我们有这么长的查询,在获取书籍和排序方面消耗了很多时间,经过性能测试,我们发现包含这个查询的页面响应时间超过10秒,我们需要寻求解决这个问题并减少响应时间。
有人有什么建议吗?
解决方案
通常检查SQL,看看它的生产,它可以做内联。有一个工具,可以帮助你做到这一点,这就是所谓的LinqPad,你可以创建一个LINQ查询和玩扭捏LINQ查询。另外,找地方添加索引;这样可以加快性能太(索引太多会损害性能,所以要小心太)。
其他提示
你到底想做什么?你能给我一个关于这里的模式的想法吗?
这对我来说似乎是一个奇怪的说法,因为我不知道架构:
p => p.Price.Any(d => d.EventDatetime.Month...
但是,我要在黑暗中尝试一下,并说您可能会遇到以下问题:
eventDC.GetBooks()
如果该方法调用存储过程或以其他方式在数据库上执行“Select * From Books”,那么您实际要做的是:
- 从数据库中选择所有书籍
- 获取结果列表并从中仅选择您想要的书籍
如果是这种情况,那么这可能是您最大的问题。
不隶属于 StackOverflow