下載吧 - 綠色安全的游戲和軟件下載中心

          軟件下載吧

          當前位置:軟件下載吧 > 數據庫 > MS_SQL > SQL開發知識:SQL Server表和索引存儲結構

          SQL開發知識:SQL Server表和索引存儲結構

          時間:2024-03-26 14:33作者:下載吧人氣:37

          本文詳細分析了SQL Server中表和索引結構存儲的原理以及對于如何加快搜索速度和提高效率等方面做了詳細的分析,以下是主要內容。

          下圖顯示了表的存儲組織,每張表有一個對應的對象ID,并且包含一個或多個分區,每個分區會有一個堆或者多個B樹,堆或者B樹的結構是預留的。每個堆或者是B樹都有三個分配單元用來存放數據,分別是數據、LOB、行溢出,使用最多的分配單元是數據。如果有LOB數據或者是長度超過8000字節的記錄,則可能有另外的LOB分配單元和行溢出分配單元。

          SQL開發知識:SQL Server表和索引存儲結構

          小總結: 一個表可以有多個分區,但是每個分區(堆/B樹)最多有三個分配單元,每個分配單元可以有很多頁,對于每個分配單元內的數據頁,根據表是否有索引,以及索引是聚集還是非聚集,組織方式有以下三種:

          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 頁內的信息。

          SQL開發知識:SQL Server表和索引存儲結構

          2. 具有非聚集索引的表

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

          SQL開發知識:SQL Server表和索引存儲結構

          3. 具有聚集索引的表

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

          SQL開發知識:SQL Server表和索引存儲結構

           

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

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

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

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

          SQL開發知識:SQL Server表和索引存儲結構

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

          SQL開發知識:SQL Server表和索引存儲結構

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

          SQL開發知識:SQL Server表和索引存儲結構

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

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

          SQL開發知識:SQL Server表和索引存儲結構

           

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

          SQL開發知識:SQL Server表和索引存儲結構

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

          SQL開發知識:SQL Server表和索引存儲結構

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

          標簽MSSQL,SQLServer,技術文檔,數據庫,SQLSERVER

          相關下載

          查看所有評論+

          網友評論

          網友
          您的評論需要經過審核才能顯示

          熱門閱覽

          最新排行

          公眾號

          主站蜘蛛池模板: 免费观看日本污污ww网站一区 | 风间由美性色一区二区三区| 精品福利一区二区三区| 国模丽丽啪啪一区二区| 精品视频一区二区三区四区 | 精品人体无码一区二区三区| 无码人妻一区二区三区在线视频 | 无码av免费一区二区三区试看| 成人在线视频一区| 一区二区三区精密机械| 中文字幕av无码一区二区三区电影| 国产一区韩国女主播| 国产成人一区二区三区精品久久 | 国产亚洲情侣一区二区无码AV| 精品视频一区二区三区四区| 国产精品合集一区二区三区| 无码人妻一区二区三区免费n鬼沢| 肥臀熟女一区二区三区| 一区视频免费观看| 国产A∨国片精品一区二区| 好爽毛片一区二区三区四无码三飞| 亚洲福利视频一区二区三区| 亚洲一区二区三区首页| 国产亚洲自拍一区| 亚洲人成人一区二区三区| 久久一区二区三区99| 91久久精一区二区三区大全| 在线精品亚洲一区二区三区 | 国产精品视频一区二区猎奇| 国产精品亚洲产品一区二区三区 | 国产产一区二区三区久久毛片国语 | 免费视频精品一区二区| 国产麻豆剧果冻传媒一区| 性色AV一区二区三区天美传媒| 无码人妻一区二区三区在线视频| 骚片AV蜜桃精品一区| 国产香蕉一区二区精品视频 | 国产伦理一区二区三区| 日韩熟女精品一区二区三区 | 国产午夜精品一区二区三区极品| 蜜芽亚洲av无码一区二区三区|