91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SQL Server中表和索引存儲結構的作用是什么

發布時間:2021-08-03 17:20:47 來源:億速云 閱讀:153 作者:Leah 欄目:數據庫

這篇文章給大家介紹SQL Server中表和索引存儲結構的作用是什么,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

1. 堆

所謂堆(heap),就是不含聚集索引的表。堆的 sys.partitions 中具有一行,對于堆使用的每個分區,都有index_id= 0。只有一個分區,在系統表里,對于這個分區下面的每個分配單元都有一個連接指向Index Allocation Map頁(IAM),在IAM頁里,描述了區的信息。

sys.system_internals_allocation_units系統視圖中的列first_iam_page指向管理特定分區中堆的分配空間的一系列 IAM 頁的第一頁。SQL Server 使用 IAM 頁在堆中移動。堆內的數據頁和行沒有任何特定的順序,也不鏈接在一起。數據頁之間唯一的邏輯連接是記錄在 IAM 頁內的信息。

2. 具有非聚集索引的表

如果有一個表只有非聚集索引而沒有聚集索引,對應的索引號是2--250。那么針對每個非聚集索引,都有一個對應的分區,在系統表進而,對于這個分區下面的每個分配單元,都有一個連接指向根頁。數據頁之間通過前后指針互相聯系,是一個完整的樹形結構。在樹的底層,會有一個連接指向真正的數據,連接的形式是文件號+頁號+行號,而真正的數據是以堆的形式存放的。如下圖所示:

3. 具有聚集索引的表

表中的聚集索引,對應的索引號是1。它有一個對應的分區,該分區下的每個分配單元都有一個連接指向根頁。對于聚集索引來說,葉子結點里存放的是真正的數據,而不是非聚集索引那樣的連接。如下圖所示:

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

基礎表的數據行不按非聚集鍵的順序排序和存儲。

非聚集索引的葉層是由索引頁而不是由數據頁組成

案例分析: 我們來查看一個表的存儲結構,我們在此使用的表是一個生產表,共有1億多條記錄,查看表的object_ID,如下圖所示:

此表,我已經做了分區,查看其分區信息,可以使用下圖所示的命令:

從上圖可以看到,此表共有16個分區,對應不同的索引,基本上每個分區都有1千多萬條記錄。從此圖中還可以看到堆或者B樹的ID跟分區ID是一樣的,如果希望進一步查看某一個索引的具體信息,可以使用下面的命令,如查看72057594067419136的信息。

從這個圖當中,我們可以看到這個分區只有一個分配單元,IN_ROW_DATA表明此分配單元只用來存放具體數據,共5353頁,已使用5346頁,數據占用5320頁。

如果希望查看根頁的位置,可以使用下面的命令:

但需要注意,這里顯示的根頁的位置是0xEC0100001100,由于存儲的關系,用倒序的方式對它進行解析,也就是0x0011000001EC,最前面的兩個字節表明是所在的文件組編號,后面的4個字節是頁的編號,即(1,0x01CE) ,換成十進制(1,492),然后可以利用我們上一節所說的DBCC PAGE命令查看頁的信息,如下圖所示:

從中可以看到具體的數據,此界面的返回結果會因表上的聚集索引、非聚集索引而不同。如果查看一個表使用的總頁數和區數,也可以使用命令:DBCC SHOWCONFIG,如下圖所示:

在同樣表結構的情況下,建立聚集索引不會增加表格的大小,但是建立非聚集索引反而會增加不少空間,在性能方面,SQL Server產品組做過測試,在select、update、delete操作下,聚集索引性能較高,在插入記錄時,聚集索引和非聚集索引性能相同,沒有出現聚集索引影響插入速度的現象,但在生產環境中,還是要謹慎行事。

關于SQL Server中表和索引存儲結構的作用是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

房山区| 岢岚县| 繁峙县| 东至县| 潢川县| 常德市| 安仁县| 德兴市| 巴青县| 洞口县| 马公市| 高青县| 大足县| 玛纳斯县| 宜春市| 黔西县| 秦皇岛市| 蓝山县| 桂阳县| 英山县| 东兴市| 田阳县| 广东省| 云浮市| 桃源县| 芮城县| 平陆县| 通渭县| 石屏县| 麻江县| 鹰潭市| 伊通| 桂东县| 新绛县| 道孚县| 台前县| 育儿| 北流市| 中宁县| 常熟市| 镇巴县|