Atitit 查詢優化器的流程attilax總結

2021-09-07 08:01:12 字數 2313 閱讀 2296

atitit 查詢優化器的流程

attilax總結

1.1. 來理解該過程:

11.2.

關於這些優化器的最重要原則的就是:

盡可能的減少掃瞄範圍,

21.3.、篩選條件分析

2

1.4.二、索引優化

2

這個圖看上去有點複雜,我們來詳細分析下,其實就是將這個優化階段分為3個子階段

<1>這個階段僅考慮序列計畫,也就說單處理器執行,如果這個階段找到了乙個好的序列計畫,優化器就不會進入下一階段。所以對於資料量少的情況,或者執行語句簡單的情況下,基本採用的都是序列計畫。

當然,如果這個階段開銷比較大,那麼會進入到第2個階段,再進行優化。

<2>這個階段首先對第

1階段的序列計畫進行優化,然後如果環境支援並行化操作,則進行並行化操作,通過進行比較,然後進行優化後的成本如果比較低則輸出執行計畫,如果成本還是比較高,則進入第

2階段,再繼續優化。

<3>其實到達這個階段就是優化的最後乙個階段了,這個階段會對第

2個階段中採用序列和並行的比較結果進行最後一步優化,如果序列執行好那就進一步優化,當然如果並行執行好的話,則再繼續並行優化。

其實第3階段是查詢優化器的無奈之舉,當到達第

3階段了就是乙個補救階段,只能最後做優化了,優化完好不好的就只能按照這個執行計畫執行了。

那麼上述過程中,各個階段的優化的原則有哪些:

不管是表或者索引,當然走索引比表好,索引的量也是越少越好,最理想的情況是只有一條或者幾條。

所以,sql server也尊重上述原則,一直圍繞著這個原則去優化。

所謂的篩選條件,其實就是我們所寫的t-sql語句中的

where

語句後面的條件,我們會通過這裡面的語句進行盡量縮小資料掃瞄範圍,

sql server

通過這些語句來優化。

但是sql server也不是萬能的,有些寫法它也是不能識別的,也是我們寫語句要避免的:

經過上面的篩選範圍的確定之後,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的專欄  

--atiend

MySQL查詢優化器原始碼分析 整體流程

函式間關係的主要邏輯如下 handle select 第 6 層結束 第 5 層結束 第 4 層結束 make outerjoin info 填充外連線的資訊 substitute for best equal field 迴圈遍歷所有表示式,化簡表示式 重複的等式能去掉則直接去掉,如 where ...

atitit 404錯誤的排查流程總結

atitit.404錯誤的排查流程總結 jsp head errorpage del zeu ok le.resin 伺服器配置問題。倆個應用配置到了同樣的的資料夾.cant access envi resin4.404 urlrewrite 偽靜態呼叫失敗 使用了urlrewrite偽靜態但是,沒...

MySQL 優化器執行流程

1.首先就是使用者傳送一條sql通過客戶端接收之後,交由解析器解析sql建立對應的解析樹之後 2.然後優化獲取對應的資料表的資訊 結構 3.獲取表中對應的資料表,首先就會去快取中讀取索引的如果沒有就會通過io讀取在磁碟中記錄索引的資訊並返回 4.選擇合適的索引 因為乙個表會有很多的索引,mysql會...