共用方式為


查詢計劃快取 (Entity SQL)

每當嘗試執行查詢時,查詢管線就會查詢其查詢計劃快取,以查看確切的查詢是否已編譯且可供使用。 如果是,它會重複使用快取的計劃,而不是建置新的計劃。 如果在查詢計劃快取中找不到相符專案,則會編譯並快取查詢。 查詢是由其 Entity SQL 文字和參數集合所識別(名稱和類型)。 所有文字比較都會區分大小寫。

設定

查詢計劃快取可透過 來設定 EntityCommand

若要透過 EntityCommand.EnablePlanCaching啟用或停用查詢計畫快取,請將此屬性設定為 truefalse。 停用個別動態查詢的計劃快取,這些查詢不太可能再使用一次,一旦改善效能。

您可以透過 EnablePlanCaching啟用查詢計劃快取。

一般而言,應該避免動態查詢。 下列動態查詢範例很容易遭受 SQL 插入式攻擊,因為不需要任何驗證就直接接受用戶輸入。

var query = "SELECT sp.SalesYTD FROM AdventureWorksEntities.SalesPerson as sp WHERE sp.EmployeeID = " + employeeTextBox.Text;

如果您確實使用動態產生的查詢,請考慮停用查詢計劃快取,以避免不太可能重複使用之快取專案的不必要的記憶體耗用量。

靜態查詢和參數化查詢的查詢計劃快取可提供效能優勢。 以下是靜態查詢的範例:

var query = "SELECT sp.SalesYTD FROM AdventureWorksEntities.SalesPerson as sp";

若要讓查詢與查詢計劃快取正確比對,其應符合下列需求:

  • 查詢文字應該是常數模式,最好是常數位符串或資源。

  • EntityParameterObjectParameter 應該在傳遞使用者提供的值時使用 。

您應該避免下列查詢模式,這在查詢計劃快取中不必要地取用位置:

  • 文字中的字母大小寫變更。

  • 空格符的變更。

  • 常值變更。

  • 批註內文字的變更。

另請參閱