瞭解強制執行計畫

USE PLAN 查詢提示可用來強制查詢最佳化工具使用指定的查詢計畫進行查詢。USE PLAN 查詢提示運作的方式是接受您要使用的查詢計畫 (XML 格式) 當做引數。您可以在查詢計畫會造成執行時間緩慢的查詢中使用 USE PLAN,但前提是您知道有更好的計畫。常見的狀況可能是在 SQL Server 舊版中執行很順利的查詢,在升級版本中 (無論是以 Service Pack 升級或完整版的升級) 執行卻效率不佳。在大部分的情況下,升級版本在大多數查詢的執行時間上,可提供一樣的效能或更好的效能,但偶而也有例外。若舊版產品中查詢最佳化工具所選取的查詢計畫比升級後所選取的查詢計畫更為優先使用時,則可使用 USE PLAN 查詢提示來處理這種狀況。

當您在疑難排解部署的應用程式中查詢效能不彰的問題時,可將 USE PLAN 查詢提示與計畫指南搭配使用。當您不能或不想直接變更應用程式,可使用計畫指南將查詢提示套用到查詢。如需計畫指南的詳細資訊,請參閱<使用計畫指南對已部署應用程式中的查詢進行最佳化>。如需說明如何在計畫指南中套用 USE PLAN 查詢提示的詳細案例,請參閱<規劃強制執行案例:建立指定查詢計畫的計畫指南>和<計畫強制方案:建立計畫指南以強制從重寫查詢取得計畫>。

大部分的查詢類型都可以使用強制執行計畫。這些查詢包含針對資料表、叢集和非叢集索引、索引檢視,以及資料分割資料表和索引的查詢。USE PLAN 可以使用資料操作語言 (DML) 陳述式 INSERT、UPDATE、MERGE 或 DELETE 加以指定。請注意,資料庫結構描述的變更 (如加入或卸除索引) 可以讓 USE PLAN 提示中指定的計畫失效。在查詢中直接指定 USE PLAN 時,無效的計畫會讓查詢失敗。在計畫指南中指定 USE PLAN 時,無效的計畫會造成查詢失敗;但是,編譯此計畫時不會使用此提示,而且此計畫可能不是最佳選擇。在計畫指南內使用 USE PLAN 提示時,您可使用 sys.fn_validate_plan_guide 函數來確認此計畫的有效性。根據此函數的結果,您可能會決定卸除計畫指南,然後重新微調查詢或修改資料庫設計。例如,您可能會重新建立計畫指南中指定的索引。

會快取使用 USE PLAN 查詢提示產生的查詢計畫,就像其他查詢計畫一樣。

強制執行計畫的限制

強制執行計畫會將查詢限制為單一的靜態執行計畫。強制執行計畫會讓查詢最佳化工具無法適應資料大小和散發、新索引,以及其他變數的變更。因此,(若誤用) 強制執行計畫會導致效能出現問題。強制執行計畫應該只在完全嘗試過其他增進查詢效能的選項後才使用,例如使用最新最精確的統計資料和最佳化的索引。強制執行計畫應盡量少用,只有經驗豐富的資料庫管理員和開發人員才可使用,因為他們對效能問題及他們的資料庫與應用程式環境的變更非常熟悉。

當您使用 USE PLAN 查詢提示來影響部署的應用程式中查詢的編譯時,應該將此提示用於計畫指南中,而非直接內嵌於應用程式中。這樣做可以讓您解決下列困境:

  • 您可以變更或移除提示,而不需要修改或重新編譯應用程式。在某些情況中,適用於某個 SQL Server 版本的 USE PLAN 提示,不一定適用於以後的 Service Pack 或版本。因此,您可能需要在應用程式部署完成後,變更或移除 USE PLAN 提示。

  • 可避免在查詢中直接使用大型提示,這樣可讓查詢更容易讀取。

    重要事項重要事項

    在建立使用 USE PLAN 的計畫指南時,您應該在測試期間確認要強制執行計畫的查詢,是否通常由資料指標要求所提交。資料指標型查詢的查詢計畫與非資料指標查詢的查詢計畫不同。因此,若要建立指定 USE PLAN 提示的計畫指南,而此提示會套用到以資料指標要求所提交的查詢,則此計畫指南必須指定資料指標計畫。如需詳細資訊,請參閱<在含有資料指標的查詢上使用 USE PLAN 查詢提示>。

下列的查詢類型不支援強制執行計畫: