对此查询的不良Oracle / LINQ for Entities性能的任何解释? (C#)

时间:2014-02-13 16:27:41

标签: c# oracle linq entity-framework

我有一个IQueryable变量'v',它是一个带有现有过滤的表达式,它指的是大约2000条记录(最多),可以在一秒钟内从Oracle返回。

我有剩余查询的2个版本:

  var values = v.Where(x => x.END_DATE != null)
    .GroupBy(x => new { Rate = x.PRICE_NOTATION.Value, ExpiryDate = x.END_DATE.Value })
    .Select(y => new
    {
       NotionalSum = y.Sum(z => z.ROUNDED_NOTIONAL_AMOUNT_1),
       Rate = y.Key.Rate,
       ExpiryDate = y.Key.Rate
    })
    .ToArray();

以及以下版本

  var values = v.Where(x => x.END_DATE != null).Select(x => new
    {
       Notional_Amount = x.ROUNDED_NOTIONAL_AMOUNT_1,
       Rate = x.PRICE_NOTATION.Value,
       ExpiryDate = x.END_DATE.Value
    })
  .GroupBy(x => new { Rate = x.Rate, ExpiryDate = x.ExpiryDate })
  .ToArray();

然后第一组选择,第二组选择组。第一个在一秒钟内返回,而第二个通常在一分钟内返回。

我想弄清楚的是为什么第二个是如此缓慢。我的意思是,如果我只是在第二个版本的开头用v.ToArray()替换v(只是将表达式'v'匹配的所有记录加载到内存中),那么查询将在2秒内返回。
我无法概述公司的观点和数据库结构,但任何人都可以提出任何关于Oracle或其Linq到EF映射中的特定问题的想法,这可能解释了这种巨大的性能差异吗?

0 个答案:

没有答案