我有一个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映射中的特定问题的想法,这可能解释了这种巨大的性能差异吗?