標籤:統計 特定 部分 mil 條件 避免 end cat 並行運算
Atitit 查詢最佳化工具的流程attilax總結
1.1. 來理解該過程:1
1.2. 關於這些最佳化器的最重要原則的就是:儘可能的減少掃描範圍,2
1.3. 、篩選條件分析2
1.4. 二、索引最佳化2
1.1. 來理解該過程:
這個圖看上去有點複雜,我們來詳細分析下,其實就是將這個最佳化階段分為3個子階段
<1>這個階段僅考慮串列計劃,也就說單一處理器運行,如果這個階段找到了一個好的串列計劃,最佳化器就不會進入下一階段。所以對於資料量少的情況,或者執行語句簡單的情況下,基本採用的都是串列計劃。
當然,如果這個階段開銷比較大,那麼會進入到第2個階段,再進行最佳化。
<2>這個階段首先對第1階段的串列計划進行最佳化,然後如果環境支援並行化操作,則進行並行化操作,通過進行比較,然後進行最佳化後的成本如果比較低則輸出執行計畫,如果成本還是比較高,則進入第2階段,再繼續最佳化。
<3>其實到達這個階段就是最佳化的最後一個階段了,這個階段會對第2個階段中採用串列和並行的比較結果進行最後一步最佳化,如果串列執行好那就進一步最佳化,當然如果並存執行好的話,則再繼續並行最佳化。
其實第3階段是查詢最佳化工具的無奈之舉,當到達第3階段了就是一個補救階段,只能最後做最佳化了,最佳化完好不好的就只能按照這個執行計畫執行了。
那麼上述過程中,各個階段的最佳化的原則有哪些:
1.2. 關於這些最佳化器的最重要原則的就是:儘可能的減少掃描範圍,
不管是表或者索引,當然走索引比表好,索引的量也是越少越好,最理想的情況是只有一條或者幾條。
所以,SQL Server也尊重上述原則,一直圍繞著這個原則去最佳化。
1.3. 、篩選條件分析
所謂的篩選條件,其實就是我們所寫的T-SQL語句中的WHERE語句後面的條件,我們會通過這裡面的語句進行盡量縮小資料掃描範圍,SQL Server通過這些語句來最佳化。
但是SQL Server也不是萬能的,有些寫法它也是不能識別的,也是我們寫語句要避免的:
1.4. 二、索引最佳化
經過上面的篩選範圍的確定之後,SQL Server緊接著開始索引的選擇,首先要確定的第一件事就是篩選欄位是否存在索引項目,也就是說是否被索引覆蓋。
當然,如果查詢項為索引覆蓋最好,如果不被索引覆蓋,那麼為了充分利用索引的特性,就引入了書籤尋找(bookmark)部分。
所以,鑒於此,我們在建立索引的時候,所參考的屬性值就為篩選條件的列了
完全相同的查詢語句,產生的查詢計劃完全不同,一個是索引掃描,一個則是高效的索引尋找。
這裡我只告訴你:FirstName like ‘K%‘的有1255行;而FirstName like ‘Y%‘只有37行,其中
其實,關於這裡的原因就是統計資訊在作怪了。
所以,特定的T-SQL語句不一定產生特定的查詢計劃,同樣特定的查詢計劃不一定是最優的方式,影響的它的因素很多:關於索引、關於硬體、關於表內容、關於統計資訊等諸多因素影響。
SQL Server調優系列基礎篇(並行運算總結) - 指尖流淌 - 部落格園.html
SQL Server調優系列進階篇(查詢最佳化工具的運行方式) - 指尖流淌 - 部落格園.html
查詢最佳化工具介紹-onlinedog-ITPUB部落格.html
作者:: 綽號:老哇的爪子claw of Eagle 偶像破壞者Iconoclast image-smasher
捕鳥王"Bird Catcher 王中之王King of Kings 虔誠者Pious 宗教信仰捍衛者 Defender of the Faith. 卡拉卡拉紅鬥篷 Caracalla red cloak
簡稱:: Emir Attilax Akbar 埃米爾 阿提拉克斯 阿克巴
全名::Emir Attilax Akbar bin Mahmud bin attila bin Solomon Al Rapanui
埃米爾 阿提拉克斯 阿克巴 本 馬哈茂德 本 阿提拉 本 所羅門 阿爾 拉帕努伊
常用名:艾提拉(艾龍), EMAIL:[email protected]
轉載請註明來源:attilax的專欄 http://www.cnblogs.com/attilax/
--Atiend
Atitit 查詢最佳化工具的流程attilax總結