Dies ist zumindest teilweise so, dass Sie die Wiederverwendung des Abfrageplans erhalten. Es könnte die Parameter inline setzen, was bedeutet, dass jedes Mal, wenn Sie die Abfrage mit verschiedenen Parametern ausführen, der Analyzer sie als eine andere Abfrage ansieht und diese erneut analysiert. Aber da es auf diese Art und Weise ausgeführt wird, wird der Abfrageplan zwischengespeichert und kann die neuen Variablen bei jeder Ausführung einfach einbinden.
Ich denke nicht, dass es eine Performance-Lösung ist. Ausführungspläne in SQL werden sogar für direkte Abfragen zwischengespeichert.
Ich denke, es ist eine Sicherheitslösung für SQL-Injektion.
Wenn Sie jedoch versuchen, Traces zu verwenden, die Linq to SQL im Datenbankmodul-Optimierungsratgeber verwenden, wird der sp_execute nicht vom Optimierungsratgeber eingebunden, ich möchte ihn deaktivieren. SQL-Injection kann auch in den Linq To Sql-Anweisungen / dem Framework (dem Code) festgestellt werden. Warum würden Sie sogar versuchen, ungültige Daten an SQL zu senden.
Zu beachten ist, dass es aufgrund der Parametrisierung auch Schutz vor SQL-Injection bietet. Ich kann mich wirklich nicht beschweren ...
Das ist eine großartige Frage.
Dies ist nicht wirklich eine Antwort, sondern eine Erkundung der Argumentation, die bereits von anderen Antworten gegeben wurde. Fühlen Sie sich frei, diese "Antwort" zu aktualisieren
Die offensichtliche Antwort wäre " parameterized query cache
" gewesen. Jedoch konnten Parameter genauso leicht gebunden werden, wenn die Anweisung direkt ausgeführt wurde und werden immer noch zwischengespeichert.
Syntax und Details in diesem MSDN Artikel ...
Leistungsansprüche bezweifle ich ohne Daten, da der Cache für direkte und sp_execsql'd-Abfragen identisch zu sein scheint.
Wenn es also nicht diese sind - was ist es?
Tags und Links sql linq-to-sql