SQLSERVER的非叢集索引結構深度理解_MsSql

來源:互聯網
上載者:User

我們知道SQLSERVER的資料行的儲存有兩種資料結構:A: 堆   B :B樹(binary 二叉樹)

資料按照這種兩種的其中一種來排序和儲存,學過資料結構的朋友應該知道二叉樹,為什麽用二叉樹,因為方便用二分尋找法來快速

找到資料。如果是堆,那麼資料是不按照任何順序排序的,也沒有任何結構,資料頁面也不是首尾相連的,不像B樹,資料頁面

使用雙向鏈表首尾相連。堆表只依靠表裡的IAM頁(索引配置對應頁)將堆的頁面聯絡在一起,IAM裡記錄了頁面編號,頁面位置

除非表裡有叢集索引,如果沒有的話那麼表裡的資料的儲存就是堆結構

那麼非叢集索引呢?非叢集索引也是堆結構?其實SQLSERVER有幾種頁面類型(資料都使用一頁一頁來儲存,就像Windows的記憶體也是使用頁面來組織的)

其中有一種是索引頁 ,一種是資料頁

我感覺很多書都說不清,就像我一樣,在文章的開頭也是這樣說的:資料行的儲存有兩種資料結構:A: 堆   B :B樹(二叉樹)

我覺得應該是資料頁面的儲存有兩種資料結構:1、堆  2、B樹

先說一下:索引頁,不管是叢集索引還是非叢集索引,這些索引資料都存放在索引頁,而索引頁都是按照B樹的結構裡儲存的

而堆頁:也就是實際的資料行,如果表裡沒有叢集索引,那麼實際的資料就放在堆頁,如果叢集索引,那麼資料就放在索引頁

而B樹裡的節點 ,其實又叫頁面,又叫節點  在B樹裡會有一頁:root page(亦即是根節點),非叢集索引和叢集索引都是一樣的

所以:資料行的儲存有兩種資料結構:A: 堆   B :B樹(二叉樹)

上面這句話應該明白了吧?

在說一下,在堆裡的資料頁面完全是隨機存放的,而資料頁面之間唯一的邏輯串連是記錄在IAM頁裡的,所以IAM頁也就扮演了root page的角色

那麼叢集索引呢?叢集索引也是堆結構?

非叢集索引放在索引頁,B樹結構,資料依舊放在堆頁,那麼如果資料頁放在堆裡,不像叢集索引放在B樹的葉子節點裡

(亦即是放在索引頁裡),那麼非叢集索引和實際的資料如何發生聯絡呢?

答案是:在非叢集索引的葉子節點(葉子頁面)會有行定位器,而行定位器的作用請看下面紅色字

非叢集索引與叢集索引具有相同的B樹結構,他們之間的顯著差別在於以下兩點:

(1)基礎資料表的資料行不按非聚集鍵的順序排序和儲存

(2)非叢集索引的葉層是由索引頁而不是由資料頁組成

(3)建立非叢集索引的表可以是一個B樹,也可以是一個堆

(4)如果表是堆(意味著該表沒有叢集索引),行定位器指向行的指標。該指標是由檔案標識符ID:頁碼:頁上的行數產生。整個

指標稱為行ID(RID)

(5)如果表有叢集索引或索引檢視表上有叢集索引,則行定位器會指向叢集索引鍵。SQL通過使用儲存在非叢集索引的葉子內的

指標(指向叢集索引鍵)搜尋叢集索引來檢索實際資料

非叢集索引不會改變或改善實際資料頁的儲存模式。他的B樹結構只針對自己的索引頁面。

不過,非叢集索引跟叢集索引的作用還是一樣的,相當於檢字表

最後總結一下吧,這麽短的隨筆總結啥子呢?

當然是總結表的結構,因為曾經有人在論壇裡問過一張表的結構

A 有叢集索引的表或者有叢集索引也有非叢集索引   (B樹)

B 沒有任何索引(堆)

C 沒有叢集索引,有非叢集索引(B樹+堆)

論壇裡有人簡稱A為聚集表  ,B和C為堆表

記得以前在大學裡資料結構老師講過的一些資料結構:大根堆  ,小根堆 ,雙向鏈表,二叉樹

可惜現在全部還給老師了

 附上圖片

堆表的結構

非叢集索引的結構

 叢集索引的結構

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.