共用方式為


設計和實作計劃指南

更新: 2007 年 9 月 15 日

當您無法直接變更或不想變更查詢文字時,可以使用計劃指南使查詢效能達到最佳。您可以建立計劃指南來搭配在下列內容中執行的查詢:

  • OBJECT 計劃指南可搭配在 Transact-SQL 預存程序、純量函數、多個陳述式資料表值函數以及 DML 觸發程序的內容中執行的查詢。
  • SQL 計劃指南可搭配在不屬於資料庫物件的獨立 Transact-SQL 陳述式與批次中執行的查詢。以 SQL 為基礎的計劃指南可用以搭配參數化為指定形式的查詢。
  • TEMPLATE 計劃指南可搭配參數化為指定形式的獨立查詢。這些計劃指南可用以針對查詢類別,覆寫資料庫目前的 PARAMETERIZATION 資料庫 SET 選項。
ms189854.note(zh-tw,SQL.90).gif附註:
雖然在任何版本都可以看見計劃指南,但計劃指南僅適用於 SQL Server 2005 Standard、Developer、Evaluation 與 Enterprise 版本。您也可以附加資料庫,以便在任何版本中包含計劃指南。當您將資料庫還原或附加至 SQL Server 2005 的升級版本時,計劃指南仍維持不變。您應該在執行伺服器升級後確認每個資料庫中計劃指南的符合度。

對於在 sp_create_plan_guide 陳述式中指定 @type = N'SQL'@type = N'TEMPLATE' 之以 SQL 或 TEMPLATE 為基礎的計劃指南,SQL Server 會逐字元比較兩個值,使查詢的 @module_or_batch@params 引數值相符。這表示您必須提供與 SQL Server 在實際批次中所收到的文字完全相符的文字。若要擷取實際的批次文字,您可以使用 SQL Server Profiler。一般而言,您應該使用 SQL Server Profiler 來測試計劃指南,以驗證查詢是否與計劃指南相符。從 SQL Server Management Studio 執行批次來測試以 SQL 或 TEMPLATE 為基礎的計劃指南時,可能會產生非預期的結果。如需詳細資訊,請參閱<使用 SQL Server Profiler 建立及測試計劃指南>。

ms189854.note(zh-tw,SQL.90).gif附註:
在包含要建立計劃指南的陳述式之批次中,將無法包含 USE database 陳述式。

@type = ‘SQL’ 且 @module\_or\_batch 設定為 NULL 時,@module_or_batch 的值會設定為 @stmt 的值。這表示提供給 statement_text 的值,必須與提交給 SQL Server 之值的格式逐字元完全相同。系統不會執行內部轉換使值相符。

計劃指南的範圍僅限於建立它們的資料庫。因此,當查詢執行時,只有目前資料庫中所存在的計劃指南可以配合查詢。例如,如果 AdventureWorks 是目前的資料庫且執行下列查詢:

SELECT * FROM Person.Contact

只有在 AdventureWorks 資料庫中的計劃指南能夠配合此查詢。

不過,如果 AdventureWorks 是目前的資料庫且執行下列陳述式:

USE DB1;
GO
SELECT * FROM Person.Contact;

只有在 DB1 中的計劃指南能夠配合查詢,因為查詢是在 DB1 中執行 。

在計劃指南中所使用的有效查詢提示組合。當計劃指南能配合查詢時,在將查詢編譯和最佳化前,在計劃指南中所指定的 OPTION 子句會加入查詢中。如果配合計劃指南的查詢已經有 OPTION 子句,在計劃指南中所指定的查?提示將會取代查詢中的提示。然而,對於配合已經有 OPTION 子句的查詢之計劃指南,您必須在指定查詢文字以符合 sp_create_plan_guide 陳述式時,包含查詢的 OPTION 子句。如果您要將計劃指南中所指定的提示加入查詢中已存在的提示,您不應該取代它們,而是必須在計劃指南的 OPTION 子句中同時指定原始提示和其他提示。

您可以建立的計劃指南總數僅限於可用的系統資源。因此,應該有節制地使用計劃指南,只用以處理可改善或穩定效能的個別查詢。計劃指南不應用來影響大部份查詢對於已部署應用程式的載入。尤其是,套用 USE PLAN 查詢提示的計劃指南將套用目標查詢的固定計劃。因此,查詢最佳化工具將無法改寫查詢計劃以配合統計資料和索引的變更。

當您考慮使用 USE PLAN 查詢的計劃指南時,請務必比較套用固定計劃的優點以及無法在資料散發和可用索引變更時自動改寫計劃之差異。

我們建議當您將應用程式升級至 SQL Server 的新版時,重新評估和測試計劃指南定義。效能微調需求和計劃指南符合的行為有可能會變更。

計劃指南對計劃快取的影響

在模組上建立計劃指南,會從計劃快取移除模組的查詢計劃。在批次上建立 OBJECT 或 SQL 類型的計劃指南,會移除具有相同雜湊值之批次的查詢計劃。建立 TEMPLATE 類型的計劃指南,會從該資料庫內的計劃快取移除所有單一陳述式的批次。

若要建立計劃指南

停用、重新啟用或卸除計劃指南

若要取得目前資料庫中計劃指南的資訊

請參閱

概念

使用計劃指南對已部署應用程式中的查詢進行最佳化

其他資源

查詢效能

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2007 年 9 月 15 日

更新的內容:
  • 釐清當 @type = ‘SQL’ 且 @module_or_batch 設定為 NULL 時,計劃指南會符合 statement_text 的需求。
  • 新增有關建立計劃指南對計劃快取之影響的資訊。