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 保研路 保研路對於很多人來說已經不是什麼隱秘了。或許很多人都聽學長學姐說過這樣的...