Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn versucht wird, eine Abfrage auszuführen, sucht die Abfragepipeline nach dem Abfrageplancache, um festzustellen, ob die genaue Abfrage bereits kompiliert und verfügbar ist. Wenn ja, wird der zwischengespeicherte Plan wiederverwendet, anstatt einen neuen Zubau zu erstellen. Wenn im Abfrageplancache keine Übereinstimmung gefunden wird, wird die Abfrage kompiliert und zwischengespeichert. Eine Abfrage wird durch seine Entity SQL-Text- und Parameterauflistung (Namen und Typen) identifiziert. Bei allen Textvergleichen wird die Groß-/Kleinschreibung beachtet.
Konfiguration
Die Zwischenspeicherung von Abfrageplänen kann über die EntityCommand.
Um das Zwischenspeichern von Abfrageplänen zu EntityCommand.EnablePlanCachingaktivieren oder zu deaktivieren, legen Sie diese Eigenschaft auf true oder false. Durch Deaktivieren der Planzwischenspeicherung für einzelne dynamische Abfragen, die nicht mehr verwendet werden können, wird die Leistung verbessert.
Sie können das Zwischenspeichern von Abfrageplänen über EnablePlanCaching.
Empfohlene Vorgehensweise
Dynamische Abfragen sollten im Allgemeinen vermieden werden. Das folgende beispiel für dynamische Abfrage ist anfällig für SQL-Einfügungsangriffe, da benutzereingaben direkt ohne Überprüfung verwendet werden.
var query = "SELECT sp.SalesYTD FROM AdventureWorksEntities.SalesPerson as sp WHERE sp.EmployeeID = " + employeeTextBox.Text;
Wenn Sie dynamisch generierte Abfragen verwenden, sollten Sie die Zwischenspeicherung von Abfrageplänen deaktivieren, um unnötige Speicherauslastung für Cacheeinträge zu vermeiden, die wahrscheinlich nicht wiederverwendet werden.
Das Zwischenspeichern von Abfrageplänen für statische Abfragen und parametrisierte Abfragen kann Leistungsvorteile bieten. Im Folgenden sehen Sie ein Beispiel für eine statische Abfrage:
var query = "SELECT sp.SalesYTD FROM AdventureWorksEntities.SalesPerson as sp";
Damit Abfragen vom Abfrageplancache ordnungsgemäß abgeglichen werden, sollten sie die folgenden Anforderungen erfüllen:
Abfragetext sollte ein Konstantenmuster sein, vorzugsweise eine Konstante Zeichenfolge oder eine Ressource.
EntityParameter oder ObjectParameter sollte verwendet werden, wo ein vom Benutzer bereitgestellter Wert übergeben werden muss.
Sie sollten die folgenden Abfragemuster vermeiden, die unnötige Slots im Abfrageplancache verbrauchen:
Ändert die Groß-/Kleinschreibung im Text.
Ändert sich an Leerzeichen.
Änderungen an Literalwerten.
Änderungen an Text in Kommentaren.