从 C# VS SSMS 执行相同的请求会产生不同的执行时间

Nic*_*ico 12 sql-server-2008 database-tuning

我有一个这样的请求

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
Run Code Online (Sandbox Code Playgroud)

当我在 SSMS 中运行此查询时,执行时间为 953 毫秒,但是当我从 C# 中的 Linq 查询运行此查询时,执行时间为 1813 毫秒。

Linq 查询使用“.Net SqlClient 数据提供程序”并针对 EntityFramework(EDMX 文件)发出。这可能是一个问题吗?

有谁知道为什么我在那些相同但从不同上下文针对同一数据库执行的请求的执行时间之间有很大差异?

我验证了两个请求的所有执行计划,它们使用相同的索引来满足各自的查询。

要查看 C# 请求的执行计划,我使用 SQL 分析器捕获 Show Plan XML 事件,并将其与 SSMS 之一进行比较,两者相同。

gbn*_*gbn 6

一次又一次,这是一致的吗?

我看到 CPU 差异可能是编译时间。是否有任何影响此的 LINQ 设置?

编辑:

  • 在 Profiler 中捕获计划
  • 您确定Profiler 中的 SQL 是相同吗?


Nic*_*ico 4

我认为问题在于 EDMX 文件用于从 C# 应用程序生成查询。

我找到了那些解释此案的链接。

代码项目

Stackoverflow-1

Stackoverflow-2