Eu tenho um pedido como este
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
Quando executo esta consulta no SSMS, obtenho um tempo de execução de 953ms, mas quando executo esta consulta a partir de uma consulta Linq em meu C#, obtenho um tempo de execução de 1813ms.
A consulta Linq usa o ".Net SqlClient Data Provider" e é emitida contra EntityFramework (arquivo EDMX). Isso pode ser um problema?
Alguém sabe por que tenho uma grande diferença entre os tempos de execução dessas solicitações que são as mesmas, mas são executadas em um contexto diferente no mesmo banco de dados?
Verifiquei todos os planos de execução de ambos os pedidos e eles usam o mesmo índice para satisfazer suas respectivas consultas.
Para ver o plano de execução da solicitação C#, uso o SQL Profiler para capturar o evento Show Plan XML e compará-lo com o do SSMS e ambos são iguais.
Isso é consistente, vez após vez?
Vejo uma diferença de CPU que pode ser o tempo de compilação. Existem configurações LINQ que afetam isso?
Editar:
Acho que o problema está no uso do arquivo EDMX para gerar consultas do aplicativo C #.
Encontrei esses links que explicam o caso.
Projeto de código
Stackoverflow-1
Stackoverflow-2
Você deve examinar os planos de execução para as duas consultas e ver onde elas são diferentes.