Ich habe eine Anfrage wie diese
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
Wenn ich diese Abfrage in SSMS ausführe, erhalte ich eine Ausführungszeit von 953 ms, aber wenn ich diese Abfrage von einer Linq-Abfrage in meinem C # ausführe, erhalte ich eine Ausführungszeit von 1813 ms.
Die Linq-Abfrage verwendet den ".Net SqlClient Data Provider" und wird gegen EntityFramework (EDMX-Datei) ausgegeben. Kann das ein Problem sein?
Weiß jemand, warum ich einen großen Unterschied zwischen den Ausführungszeiten der Anforderungen habe, die gleich sind, aber aus verschiedenen Kontexten für dieselbe Datenbank ausgeführt werden?
Ich habe alle Ausführungspläne beider Anforderungen überprüft und sie verwenden denselben Index, um ihre jeweilige Abfrage zu erfüllen.
Um den Ausführungsplan der C # -Anforderung anzuzeigen, verwende ich den SQL-Profiler, um das Show Plan XML-Ereignis abzufangen, und vergleiche es mit dem von SSMS, und beide sind gleich.
Antworten:
Ist das immer wieder konsistent?
Ich sehe einen CPU-Unterschied, der Kompilierungszeit sein könnte. Gibt es irgendwelche LINQ-Einstellungen, die dies beeinflussen?
Bearbeiten:
quelle
Ich denke, dass das Problem in der EDMX-Datei liegt, mit der Abfragen aus der C # -App generiert werden.
Ich habe die Links gefunden, die den Fall erklären.
Code-Projekt
Stapelüberlauf-1
Stackoverflow-2
quelle
Sie sollten sich die Ausführungspläne für die beiden Abfragen ansehen und feststellen, wo sie sich unterscheiden.
quelle