表分割槽的陰暗面(執行計畫)

2021-09-06 06:50:25 字數 3710 閱讀 9621

careson 發表了一片博文其實我碰到過類似的事情,但是沒有仔細研究為什麼。藉著careson的demo,仔細的觀察了執行計畫。

測試資料

當然第一步根據careson的demo建立乙份測試資料。

第二步為了做比較的需要,建乙個非分割槽的非聚集索引,key 和 分割槽對齊的非聚集索引一樣。

第三步建議乙個非分割槽表,資料和分割槽表一樣,我在測試的時候叫order2

第四步在order2建3個索引,1 聚集索引非分割槽,2.非聚集索引分割槽,3非聚集索引非分割槽

疑問

這樣測試資料就準備全了。careson的博文給我幾個問題:1.為啥不走非聚集索引,2.走了索引會怎麼樣,3如果索引是非分割槽索引呢,4如果表是非分割槽表,中的分割槽索引會怎麼樣

測試結果

根據問題我寫了一下幾個sql和對應執行計畫和結果(效能差距很大所以單看執行計畫就能猜出那個效能比較好):

1.使用索引提示,強行走分割槽索引

(100 行受影響)

表 'orders'。掃瞄計數 4,邏輯讀取 286265 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。

表 'worktable'。掃瞄計數 0,邏輯讀取 0 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。

(1 行受影響)

2.在分割槽表中不走索引(在這裡表結構要稍微的變動一下,把非聚集索引刪除)

(100 行受影響)

表 'orders'。掃瞄計數 6,邏輯讀取 25229 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。

(1 行受影響)

3.使用索引提示,強行走非分割槽索引

(100 行受影響)

表 'orders'。掃瞄計數 1,邏輯讀取 318 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。

(1 行受影響)

4.在非分割槽表中,使用索引提示走分割槽索引

(100 行受影響)

表 'orders2'。掃瞄計數 4,邏輯讀取 286265 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。

表 'worktable'。掃瞄計數 0,邏輯讀取 0 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。

(1 行受影響)

5.非分割槽表正常執行

(100 行受影響)

表 'orders2'。掃瞄計數 1,邏輯讀取 318 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。

(1 行受影響)

解決問題

現在結果有了,那麼就來解答先前的幾個問題1.為啥不走非聚集索引,2.走了索引會怎麼樣,3如果索引是非分割槽索引呢,4如果表是非分割槽表,中的分割槽索引會怎麼樣

1.為啥不走索引呢?

1和2 對比一下,1中邏輯讀大概是2中的10倍,就算sql server 再傻也會用2這個執行計畫。

2.走了索引會怎麼樣?

看1的執行時間和執行計畫,走了索引效能很爛

3.如果索引是非分割槽索引呢?

請對比1和3,2和3效能差距不是一點點,那麼就引出另外乙個話題,為什麼非分割槽索引效能比分區的好呢?這個下面再討論

4.表如果是非分割槽表,中的分割槽索引會怎麼樣?

對比4和5非常負責任的告訴你,效能很爛。

總結

現在來說說為什麼非分割槽索引效能在這裡比分區的好,分割槽索引是根據分割槽方案,分別存放,如前面的例子直接使用某個值來過濾,索引查詢會掃瞄所有分割槽,查詢那些資料,那麼它讀取的頁遠遠大於直接在非聚集索引中seek,自己執行demo,檢視非聚集索引seek左邊的排序,是根據orderdate,id排序,視乎在為了給巢狀迴圈做準備,之後還要根據datemodified,id排序。非分割槽索引嚴格按照排序的字段排序,因此看執行計畫的時候看實際相應行數為100,但是看走分割槽索引的實際相應行數則為170081也就意味著走非分割槽索引加大了io,和多餘的計算。恰恰造成查詢偏慢的原因就是因為分割槽的陰暗面。不恰當的使用分割槽。careson的博文讓我對分割槽表和索引對齊有了更加深入的認識。

表分割槽的陰暗面

本篇文章是我在 看到了,如我們所知,大家在介紹表分割槽的時候一直在歌頌其好處。但一句古諺語說的好,每個人都有其陰暗面,表分割槽也會在特定情況下反而降低其效能。首先建立測試表,並在其上建立聚集索引 create table dbo.orders id int notnull orderdate dat...

如何看待社會的陰暗面

我發現乙個現象,這兩年微博的環境變的不一樣了。前兩三年微博上各種的公知大v,針砭時弊,高談闊論,但僅僅也就兩三年的時間,就變成了網紅娛樂圈的陣地,當然不變的是依然很熱鬧。各種的撕逼互殺依然在上演。當然這其中也存在著不少投機取巧的選手,後來就出現這樣的新聞,某造謠團夥被抓,很多知名大v開始浮出水面,但...

大學中的3大陰暗面, 一般人根本想象不到

在很多人的想象中,大學是乙個非常完美的地方。的確,對於大多數學生來說,大學是乙個充滿了美好回憶場景。不過,有陽光就會有陰影,再好的大學裡,也會有一些骯髒的事情發生。下面我們就來說說大學中那些少見,但的確存在的黑暗面。1 保研路 保研路對於很多人來說已經不是什麼隱秘了。或許很多人都聽學長學姐說過這樣的...