【发布时间】:2013-01-20 08:25:42
【问题描述】:
我注意到今天使用 Entity Framework 的执行时间存在巨大差异。我想知道为什么第一个语句有这么多开销。对于这个查询,我正在从数据库中检索 5500 个趋势数据值(这应该没什么大不了的)。
这是我之前使用的语句:
TrendDataValues = new ObservableCollection<TrendDataValue>(_trendDataContext.TrendDatas.First(td => td.Id == argument.TrendDataId)
.TrendDataValues
.Where(tdv => tdv.ValueStartTimestamp >= argument.MinValue
&& tdv.ValueStartTimestamp <= argument.MaxValue));
但是,此语句需要 10 秒才能运行。
我已将第一个语句重写为以下语句。这将检索完全相同的数据。但是,此语句会在 0.2 秒内返回值。
TrendDataValues = new ObservableCollection<TrendDataValue>(from td in _trendDataContext.TrendDatas.Where(d => d.Id == trendDataId)
from tdv in td.TrendDataValues
where tdv.ValueStartTimestamp >= argument.MinValue
&& tdv.ValueEndTimestamp <= argument.MaxValue
select tdv);
有人可以澄清这两种说法的区别吗?
【问题讨论】:
-
在第一个中,您将开始时间与最小值和最大值进行比较,在第二个中,您将开始时间与最小值进行比较,结束时间与最大值进行比较。这只是一个错字吗?
-
啊,是的,这是一个错字。但是,在当前情况下,它不会有什么不同,因为在这种情况下,结束和开始时间戳是相等的
-
您的分析工具是否建议花费时间在 SQL Server 上执行查询?如果有,这两个执行计划有什么区别(如果有的话)。
标签: c# .net linq frameworks entity