簡介
每天,在不同的Microsoft SQL Server討論版上,同樣的問題出現一次又一次:
- 為什么這次查詢運行慢了?
- 我的索引用到了么?
- 為什么我的索引沒有被用到?
- 為什么這個查詢比那次查詢快?
- 等等等等
正確的回答在各種情況可能不一樣,但是為了回答,你必須每次都問一個同樣的問題:你看了執行計劃(Execution
Plan)了么?
執行計劃顯示了SQL
Server背后做了什么。他可以給你提供大量的信息關于你的查詢是如何被SQL
Server執行的,包括
- 哪些索引被用到了,以及哪里完全沒有索引
- 數據是如何從表中檢索和連接的
- GROUP BY查詢中數據是怎么聚集的
- 所有這些操作對系統造成的預期壓力(anticipated
load),和估計成本,等等
所有這些信息使得執行計劃變成你的工具箱中一個相當重要的工具,無論你是數據庫管理員,數據庫開發人員,報告編寫人員,開發人員,還是任何寫TSQL來訪問SQL Server的人。
給定這個工具以及工具的重要性,你可能認為有大量的信息關于這個主題。不錯,很多不同的地方的確有一些很好的信息,然而,沒有一個地方集中了如何使用和翻譯執行計劃的實踐。
這本書就是這個地方。我的目標是盡可能地把各種關于執行計劃的有用信息放在一個地方,并且提供清晰的路由指向主題,從捕捉計劃的基本開始,通過翻譯,然后如何使用他們理解如何優化你的查詢,提高你的索引策略等等。
特別的,我覆蓋了
· 如何捕獲圖形執行計劃,以及文本執行計劃,和XML執行計劃
· 一個文檔化的方法關于如何翻譯執行計劃,因此你可以從你自己的代碼里創建計劃而且使之適用于你自己的環境
· SQL Server如何在執行計劃里表示和翻譯通用的SQL Server對象-索引,試圖,派生表等等
· 如何定位通用的性能問題,比如書簽查找或未使用的、遺失的索引
· 如何通過提示、執行向導等等來控制執行計劃,以及為什么這是雙刃劍
· XML代碼是如何出現在執行計劃里的
· 高級主題,比如并發、強制參數化以及強制計劃
在講述的過程之中,我還解決了這些主題:SQL Server內部機制,性能調優,索引優化等等。然后,我的關注點始終在執行計劃的細節上,以及這些問題是如何在計劃中表示的。如果你在找一些信息關于如何優化SQL,或者建立有效的索引,那么你需要找一本關注這些主題的書。但是,如果你想要理解這些問題在一個執行計劃中如何表現了,本書就是這個地方了。