SQLSERVER的非聚集索引結構
SQLSERVER的非聚集索引結構
2013-01-21 08:49:39 我來說兩句 作者:樺仔
收藏 我要投稿
SQLSERVER的非聚集索引結構
我們知道SQLSERVER的資料行的儲存有兩種資料結構:A: 堆 B :B樹(binary 二叉樹) www.2cto.com
資料按照這種兩種的其中一種來排序和儲存,學過資料結構的朋友應該知道二叉樹,為什麼用二叉樹,因為方便用二分查詢法來快速
找到資料。如果是堆,那麼資料是不按照任何順序排序的,也沒有任何結構,資料頁面也不是首尾相連的,不像B樹,資料頁面
使用雙向連結串列首尾相連。堆表只依靠表裡的IAM頁(索引分配對映頁)將堆的頁面聯絡在一起,IAM裡記錄了頁面編號,頁面位置
除非表裡有聚集索引,如果沒有的話那麼表裡的資料的儲存就是堆結構
那麼非聚集索引呢?非聚集索引也是堆結構?其實SQLSERVER有幾種頁面型別(資料都使用一頁一頁來儲存,就像Windows的記憶體也是使用頁面來組織的)
其中有一種是索引頁 ,一種是資料頁 www.2cto.com
我感覺很多書都說不清,就像我一樣,在文章的開頭也是這樣說的:
我覺得應該是資料頁面的儲存有兩種資料結構:1、堆 2、B樹
先說一下:索引頁,不管是聚集索引還是非聚集索引,這些索引資料都存放在索引頁,而索引頁都是按照B樹的結構裡儲存的
而堆頁:也就是實際的資料行,如果表裡沒有聚集索引,那麼實際的資料就放在堆頁,如果聚集索引,那麼資料就放在索引頁
而B樹裡的節點 ,其實又叫頁面,又叫節點 在B樹裡會有一頁:root page(亦即是根節點),非聚集索引和聚集索引都是一樣的
所以:
上面這句話應該明白了吧?
在說一下,在堆裡的資料頁面完全是隨機存放的,而資料頁面之間唯一的邏輯連線是記錄在IAM頁裡的,所以IAM頁也就扮演了root page的角色
那麼聚集索引呢?聚集索引也是堆結構?
非聚集索引放在索引頁,B樹結構,資料依舊放在堆頁,那麼如果資料頁放在堆裡,不像聚集索引放在B樹的葉子節點裡
(亦即是放在索引頁裡),那麼非聚集索引和實際的資料如何發生聯絡呢?
答案是:在非聚集索引的葉子節點(葉子頁面)會有行定位器,而行定位器的作用請看下面紅色字
非聚集索引與聚集索引具有相同的B樹結構,他們之間的顯著差別在於以下兩點:
(1)基礎表的資料行不按非聚集鍵的順序排序和儲存
(2)非聚集索引的葉層是由索引頁而不是由資料頁組成
(3)建立非聚集索引的表可以是一個B樹,也可以是一個堆
指標(指向聚集索引鍵)搜尋聚集索引來檢索實際資料
非聚集索引不會改變或改善實際資料頁的儲存模式。他的B樹結構只針對自己的索引頁面。
不過,非聚集索引跟聚集索引的作用還是一樣的,相當於檢字表
最後總結一下吧,這麼短的隨筆總結啥子呢?
當然是總結表的結構,因為曾經有人在論壇裡問過一張表的結構
A 有聚集索引的表或者有聚集索引也有非聚集索引 (B樹)
B 沒有任何索引(堆)
C 沒有聚集索引,有非聚集索引(B樹+堆)
論壇裡有人簡稱A為聚集表 ,B和C為堆表
2013-01-21 08:49:39 我來說兩句 作者:樺仔
收藏 我要投稿
SQLSERVER的非聚集索引結構
我們知道SQLSERVER的資料行的儲存有兩種資料結構:A: 堆 B :B樹(binary 二叉樹) www.2cto.com
資料按照這種兩種的其中一種來排序和儲存,學過資料結構的朋友應該知道二叉樹,為什麼用二叉樹,因為方便用二分查詢法來快速
找到資料。如果是堆,那麼資料是不按照任何順序排序的,也沒有任何結構,資料頁面也不是首尾相連的,不像B樹,資料頁面
使用雙向連結串列首尾相連。堆表只依靠表裡的IAM頁(索引分配對映頁)將堆的頁面聯絡在一起,IAM裡記錄了頁面編號,頁面位置
除非表裡有聚集索引,如果沒有的話那麼表裡的資料的儲存就是堆結構
那麼非聚集索引呢?非聚集索引也是堆結構?其實SQLSERVER有幾種頁面型別(資料都使用一頁一頁來儲存,就像Windows的記憶體也是使用頁面來組織的)
其中有一種是索引頁 ,一種是資料頁 www.2cto.com
我感覺很多書都說不清,就像我一樣,在文章的開頭也是這樣說的:
我覺得應該是資料頁面的儲存有兩種資料結構:1、堆 2、B樹
先說一下:索引頁,不管是聚集索引還是非聚集索引,這些索引資料都存放在索引頁,而索引頁都是按照B樹的結構裡儲存的
而堆頁:也就是實際的資料行,如果表裡沒有聚集索引,那麼實際的資料就放在堆頁,如果聚集索引,那麼資料就放在索引頁
而B樹裡的節點 ,其實又叫頁面,又叫節點 在B樹裡會有一頁:root page(亦即是根節點),非聚集索引和聚集索引都是一樣的
所以:
上面這句話應該明白了吧?
在說一下,在堆裡的資料頁面完全是隨機存放的,而資料頁面之間唯一的邏輯連線是記錄在IAM頁裡的,所以IAM頁也就扮演了root page的角色
那麼聚集索引呢?聚集索引也是堆結構?
非聚集索引放在索引頁,B樹結構,資料依舊放在堆頁,那麼如果資料頁放在堆裡,不像聚集索引放在B樹的葉子節點裡
(亦即是放在索引頁裡),那麼非聚集索引和實際的資料如何發生聯絡呢?
答案是:在非聚集索引的葉子節點(葉子頁面)會有行定位器,而行定位器的作用請看下面紅色字
非聚集索引與聚集索引具有相同的B樹結構,他們之間的顯著差別在於以下兩點:
(1)基礎表的資料行不按非聚集鍵的順序排序和儲存
(2)非聚集索引的葉層是由索引頁而不是由資料頁組成
(3)建立非聚集索引的表可以是一個B樹,也可以是一個堆
指標(指向聚集索引鍵)搜尋聚集索引來檢索實際資料
非聚集索引不會改變或改善實際資料頁的儲存模式。他的B樹結構只針對自己的索引頁面。
不過,非聚集索引跟聚集索引的作用還是一樣的,相當於檢字表
最後總結一下吧,這麼短的隨筆總結啥子呢?
當然是總結表的結構,因為曾經有人在論壇裡問過一張表的結構
A 有聚集索引的表或者有聚集索引也有非聚集索引 (B樹)
B 沒有任何索引(堆)
C 沒有聚集索引,有非聚集索引(B樹+堆)
論壇裡有人簡稱A為聚集表 ,B和C為堆表
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25897606/viewspace-759233/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [zt] 聚集索引和非聚集索引(sql server索引結構及其使用)索引SQLServer
- mysql關於聚集索引、非聚集索引的總結MySql索引
- SQL Server 索引和表體系結構(非聚集索引)SQLServer索引
- [轉]聚集索引和非聚集索引的區別索引
- 使用聚集索引和非聚集索引的區別索引
- SQL Server 聚集索引和非聚集索引的區別SQLServer索引
- 一文總結分析聚集索引、非聚集索引、覆蓋索引的工作原理!索引
- SQL Server索引 - 非聚集索引SQLServer索引
- 資料庫的聚集索引和非聚集索引 很好的詳細說明資料庫索引
- SQL Server 索引和表體系結構(聚集索引)SQLServer索引
- SQL Server 深入解析索引儲存(非聚集索引)SQLServer索引
- 從InnoDB 索引執行簡述 聚集索引和非聚集索引、覆蓋索引、回表、索引下推索引
- SQL Server 2008 建立非聚集索引SQLServer索引
- (2) SqlServer表與索引的結構的補充SQLServer索引
- SQL Server 2008 非聚集索引設計SQLServer索引
- 對SQLServer錯誤使用聚集索引的優化案例(千萬級資料量)SQLServer索引優化
- 關於通過聚集索引以及堆來對比資料表組織結構-SQLServer最優實踐 的一點看法索引SQLServer
- FAQ系列|MySQL索引之聚集索引MySql索引
- Sql Server之旅——第四站 你必須知道的非聚集索引掃描SQLServer索引
- 探究SQL新增非聚集索引,效能提高几十倍之謎SQL索引
- 主鍵索引 (聚集索引) 和普通索引 (輔助索引) 的區別索引
- SqlServer——索引SQLServer索引
- SQL Server 深入解析索引儲存(聚集索引)SQLServer索引
- SQLServer索引維護常用方法總結SQLServer索引
- MySQL索引的結構MySql索引
- 【SQL Server2005頁面儲存5之--非聚集索引行在非葉級別儲存】SQLServer索引
- PostgreSQLGIN單列聚集索引應用SQL索引
- 結構化與非結構化
- MySQL 索引結構MySql索引
- dump索引結構索引
- sqlserver表結構查詢SQLServer
- Mysql索引結構與索引原理MySql索引
- [zt] SQLSERVER索引的使用技巧SQLServer索引
- 在sqlserver中顯示錶的結構SQLServer
- sqlserver 全部索引重建SQLServer索引
- SQL Server 索引結構SQLServer索引
- 索引資料結構索引資料結構
- Oracle表結構轉換SqlSERVER表結構 指令碼OracleSQLServer指令碼