3 Stimmen

Kann SQL Server LINQ to SQL-Abfragen zwischenspeichern?

Soweit ich weiß, werden in MS SQL Server 2000+ Stored Procedures kompiliert und laufen schneller als normale, nicht kompilierte Abfragen. Ich frage mich, ob MS SQL Server auch LINQ to SQL-Abfragen kompiliert und diese Kompilierung zu Leistungszwecken in den Cache stellt.

3voto

Robert MacLean Punkte 38545

Wenn es um den Ausführungsplan in SQL Server geht, gibt es keine großen Geschwindigkeitsunterschiede zwischen gespeicherten Prozeduren und normalen, nicht kompilierten Abfragen. Siehe dies für weitere Informationen über andere Faktoren der Geschwindigkeit.

LINQ-to-SQL generiert normale parametrisierte Abfragen (SQL Server weiß nichts über LINQ, die App generiert normales SQL), so dass die Bilanz dieselbe ist. Das heißt, wenn Sie nicht die LINQ-to-SQL-Funktionen verwenden, die Stored Procs aufrufen (vorausgesetzt, Sie meinten das Abfragezeug).

Vielleicht möchten Sie auch Folgendes lesen diese Diese Frage ist ähnlich gelagert, konzentriert sich aber auf die wichtigeren Vorteile von LINQ gegenüber StoredProcs

2voto

Alan Jackson Punkte 6093

SQL Server weiß nichts über LINQ.

Soweit ich weiß, läuft LINQ nur als Bibliothek, die die Abfragen verwendet, um SQL-Abfragen zu erzeugen, die dann als SQL-Textbefehle an den Server gesendet werden.

1voto

Gustavo Punkte 359

Soweit ich weiß, verhält es sich wie normale Abfragen an SQL Server. Sie können Stored Procedures immer mit LINQ to SQL aufrufen, wenn es für Ihren speziellen Fall Vorteile gibt.

1voto

Hector Sosa Jr Punkte 4222

MS SQL Server speichert die Abfragepläne für alle TSQL-Abfragen, die gegen ihn ausgeführt werden. Sobald der Plan zwischengespeichert ist, wird die Abfrage etwas schneller ausgeführt. Ich weiß, dass es eine Verfallszeit für diesen Cache gibt, aber ich habe die DBAs nicht danach gefragt.

Soweit ich weiß, war MS SQL Server 2000 der letzte, der die Stored Procs kompilierte. Das wird nicht mehr gemacht. Aus diesem Grund sind viele Inline-Abfragen genauso schnell (mit SQL Server 2000+).

1voto

NicoJuicy Punkte 3317

CompiledQueries von LinQ werden vom SQL Server zwischengespeichert, deshalb sind sie so viel schneller. Normale LinQ-Abfragen werden vom SQL Server nicht zwischengespeichert.

Zum Testen.

Erstellen einer normalen LinQ-Abfrage Erstellen Sie die gleiche kompilierte LinQ-Abfrage.

Nachdem die kompilierte Abfrage mehrere Male ausgeführt wurde, bereinigen Sie den SQL-Cache und Sie werden feststellen, dass sie beim ersten Mal fast die gleiche Ausführungszeit hat wie die normale LinQ-Abfrage.

PS. Sie können den SQL Server-Cache mit der folgenden Abfrage bereinigen: DBCC DROPCLEANBUFFERS

Um also Ihre Frage zu LinQ-Abfragen und Caching zu beantworten.

Normale LinQ-Abfragen werden nicht zwischengespeichert und sollten verwendet werden, wenn sie nur einmal ausgeführt werden müssen. Kompilierte LinQ-Abfragen werden vom SQL-Server zwischengespeichert und bieten Leistungsverbesserungen, wenn sie mehr als einmal ausgeführt werden.

Ich habe gerade erst davon erfahren und finde es praktisch, das zu wissen.

0 Stimmen

Ich glaube nicht, dass Linq-to-SQL eine CompiledQueries . Aber ich habe es gegoogelt und herausgefunden, dass Linq-to-Entities hat.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X