Tengo una solicitud como esta
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
Cuando ejecuto esta consulta en SSMS obtengo un tiempo de ejecución de 953 ms, pero cuando ejecuto esta consulta desde una consulta Linq en mi C # obtengo un tiempo de ejecución de 1813 ms.
La consulta Linq utiliza el "proveedor de datos de .Net SqlClient" y se emite contra EntityFramework (archivo EDMX). ¿Esto puede ser un problema?
¿Alguien sabe por qué tengo una gran diferencia entre los tiempos de ejecución de esas solicitudes que son las mismas pero se ejecutan desde un contexto diferente en la misma base de datos?
Verifiqué todos los planes de ejecución de ambas solicitudes y utilizan el mismo índice para satisfacer sus respectivas consultas.
Para ver el plan de ejecución de la solicitud de C #, utilizo el generador de perfiles SQL para capturar el evento Mostrar plan XML y lo comparo con el de SSMS y ambos son iguales.
Respuestas:
¿Es esto consistente una y otra vez?
Veo una diferencia de CPU que podría ser el tiempo de compilación. ¿Hay alguna configuración de LINQ que afecte esto?
Editar:
fuente
Creo que el problema está en el uso del archivo EDMX para generar consultas desde la aplicación C #.
Encontré esos enlaces que explican el caso.
Proyecto de código
Stackoverflow-1
Stackoverflow-2
fuente
Deberá mirar los planes de ejecución para las dos consultas y ver en qué se diferencian.
fuente