天天看點

SQL Server 深入解析索引存儲(聚集索引)

标簽:SQL SERVER/MSSQL SERVER/資料庫/DBA/索引體系結構/堆/聚集索引

最近要分享一個課件就重新把這塊知識整理了一遍出來,篇幅有點長,想要了解的透徹還是要上機實踐。

SQL Server 深入解析索引存儲(聚集索引)
SQL Server 深入解析索引存儲(聚集索引)

分析新建立的表的頁的資訊

SQL Server 深入解析索引存儲(聚集索引)

/*

1:顯示所有分頁的資訊,包括IAM分頁,資料分頁,所有存在的LOB分頁和行溢出頁,索引分頁

-1: 顯示所有IAM、資料分頁、及指定對象上全部索引的索引分頁.

-2: 顯示指定對象的所有IAM分頁

0:顯示所有IAM、資料分頁.

*/

SQL Server 深入解析索引存儲(聚集索引)
SQL Server 深入解析索引存儲(聚集索引)
SQL Server 深入解析索引存儲(聚集索引)

還可以通過另一種方法來測試:

SQL Server 深入解析索引存儲(聚集索引)
SQL Server 深入解析索引存儲(聚集索引)
SQL Server 深入解析索引存儲(聚集索引)

 最後三個字段分别是IAM頁,根頁,和第一個資料頁;它們分别用16進制來表示,拿first_iam_page來分析,首先将編碼從右往左一個位元組接着一個位元組反過來排行(0X代表16進制),結果就是0X,00 01,00 00 00 50;前兩個位元組代表檔案組号,最後4個位元組代表頁号。16進制的0001轉換成10進制就是1;16進制的00 00 00 50轉換成10進制就是5*16的1次方=5*16=80,是以第一個資料頁是4*16+15=79,根頁是5*16+9=89 結果和前面的查詢出來的結果是一樣的。從表格的otal_pages,used_pages,data_pages得到的結果也和前面查詢出來的結果是一緻的,總配置設定了17個頁,使用了15個頁包括13個資料頁+1個IAM頁+1個索引頁。

手繪一張目前表格的聚集索引體系結構圖:

SQL Server 深入解析索引存儲(聚集索引)

分析索引頁

SQL Server 深入解析索引存儲(聚集索引)

 分析結果89頁下面的子頁總共有13頁,每頁80條記錄,89索引頁記錄了每頁的的鍵值的最小值,第一頁就是id為1-80,第二頁81-160,是以當你要找ID為150的資料的時候直接就可以去第90頁裡面找了。

PAGE HEADER

SQL Server 深入解析索引存儲(聚集索引)

 分析資料頁

SQL Server 深入解析索引存儲(聚集索引)

通過這些資料我們基本上可以知道90頁的基本情況了,包括它的字段長度,上一頁、下一頁,還有該頁的是以記錄(這裡沒有截圖出來).

插入20萬條記錄分析索引結構 

SQL Server 深入解析索引存儲(聚集索引)
SQL Server 深入解析索引存儲(聚集索引)
SQL Server 深入解析索引存儲(聚集索引)

通過兩種方法查詢到的索引頁的數量是一樣的,下面的這種計算方法是2524-2513-1(IAM頁)=10,其中807頁是root_page頁它在第二級,其它的是中間級索引頁頁就是第一級;頁可以通過下面的16進制計算出來,IAM=5*16=80,ROOT_PAGE=3*16*16+2*16+7=807

再分析89頁

查詢結果總共有269行,頁就是269個資料頁,orders表總共插入了201000條記錄,一個頁面存80條記錄,就需要2513個頁面和上面查詢到的data_page是一樣的。每個索引頁存儲269個資料頁面就需要(‘select 2513*1.0/269’除不盡加1)10個索引頁,查詢最後一個索引頁2698發現它還沒分頁共存儲了361條記錄,總共8*269+361=2513

手繪存儲結構 

SQL Server 深入解析索引存儲(聚集索引)

手繪的有點難看,但是意思差不多表達出來了。

大型對象 (LOB) 列

 根據聚集索引中的資料類型,每個聚集索引結構将有一個或多個配置設定單元,将在這些單元中存儲和管理特定分區的相關資料。每個聚集索引的每個分區中至少有一個 IN_ROW_DATA 配置設定單元。如果聚集索引包含大型對象 (LOB) 列,則它的每個分區中還會有一個 LOB_DATA 配置設定單元。如果聚集索引包含的變量長度列超過 8,060 位元組的行大小限制,則它的每個分區中還會有一個 ROW_OVERFLOW_DATA 配置設定單元。

SQL Server 深入解析索引存儲(聚集索引)
SQL Server 深入解析索引存儲(聚集索引)
SQL Server 深入解析索引存儲(聚集索引)
SQL Server 深入解析索引存儲(聚集索引)

結果記錄了每一條記錄的偏移量。

每個人在自己的電腦上面測試頁面id會不一樣,但是反應的結果是一樣的。

  本來想全部寫完的,等寫完這部分的時候發現篇幅已經有點長了,而且自己也有的吃不消熬到1點才寫完,接下來還有中下兩部分會盡快在幾天内寫完,歡迎關注。   

本文轉自pursuer.chen(陳敏華)部落格園部落格,原文連結:http://www.cnblogs.com/chenmh/p/4356428.html,如需轉載請自行聯系原作者