我们如何优化此linq到实体查询以减少响应时间?

时间:2010-01-08 14:57:10

标签: c# asp.net linq linq-to-entities database-optimization

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秒,我们需要寻求解决这个问题,缩短响应时间。

有人有任何建议吗?

2 个答案:

答案 0 :(得分:1)

你到底想要做什么?你能告诉我这里的架构吗?

这对我来说似乎是一个奇怪的陈述,因为我不知道架构:

  

p =&gt; p.Price.Any(d =&gt; d.EventDatetime.Month ......

但是,我会在黑暗中拍摄并说你可能遇到问题:

  

eventDC.GetBooks()

如果该方法调用存储过程或在数据库上执行“Select * From Books”,那么您实际在做的是:

  1. 从数据库中选择所有书籍
  2. 获取结果列表并仅选择您想要的书籍
  3. 如果是这种情况,那么这可能是你最大的问题。

答案 1 :(得分:0)

通常检查SQL以查看它生成的内容,您可以内联。有一个工具可以帮助你做到这一点,它叫做LinqPad,你可以创建一个LINQ查询,并调整LINQ查询。另外,寻找添加索引的地方;这也可以加快性能(太多的索引会影响性能,所以要小心)。