我有一个这样的请求
SELECT
[EstimateId],
[CreationUserId],
[EstimateStatusValueId],
[LanguageId],
[LocationId],
[EstimatorUserId],
[FilterUnitSystemTypeId],
[EstimateNumber],
[RevisionNumber],
[CreationDate],
[ModificationDate],
[ProjectDescription],
[IsBsdq],
[ClosingDate],
[ClosingTime],
[ClosingUpdatedOn],
[DeadLineDate],
[IsReceived],
[Inclusion],
[Exclusion],
[Misc],
[Note],
[WorkDeadLines],
[Comments],
[Validity],
[PlansLocation],
[PlansReceivedFrom],
[Price]
FROM [Estimate].[Estimates]
ORDER BY [ClosingDate] ASC, [ClosingTime] ASC
当我在 SSMS 中运行此查询时,我得到的执行时间为 953 毫秒,但是当我从 C# 中的 Linq 查询运行此查询时,我得到的执行时间为 1813 毫秒。
Linq 查询使用“.Net SqlClient Data Provider”并针对 EntityFramework(EDMX 文件)发出。这可能是个问题吗?
有谁知道为什么我在那些相同但从不同上下文针对同一数据库执行的请求的执行时间之间存在很大差异?
我验证了两个请求的所有执行计划,并且它们使用相同的索引来满足各自的查询。
要查看 C# 请求的执行计划,我使用 SQL 事件探查器捕获 Show Plan XML 事件,并将其与 SSMS 中的一个进行比较,两者是相同的。
这是一致的,一次又一次吗?
我看到可能是编译时间的 CPU 差异。是否有影响此的任何 LINQ 设置?
编辑:
我认为问题出在用于从 C# 应用程序生成查询的 EDMX 文件中。
我找到了那些解释案例的链接。
代码项目
Stackoverflow-1
Stackoverflow-2
您需要查看这两个查询的执行计划,看看它们的不同之处。