亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

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

2024-08-31 00:54:42
字體:
來源:轉載
供稿:網友
SQL Server 深入解析索引存儲(上)

標簽:SQL SERVER/MSSQL SERVER/數據庫/DBA/索引體系結構/堆/聚集索引

概述

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

正文聚集索引
--創建測試數據庫CREATE DATABASE IxdataGOUSE [Ixdata]GO---創建測試表CREATE TABLE Orders(ID INT PRIMARY KEY IDENTITY(1,1),NAME CHAR(80)NOT NULL,IDATE DATETIME NOT NULL DEFAULT(GETDATE()));GO---插入1000條測試數據DECLARE @ID INT=1WHILE(@ID<=1000)BEGININSERT INTO Orders(NAME)VALUES('商品'+CONVERT(NVARCHAR(20),@ID))SET @ID=@ID+1 ENDGOSELECT * FROM Orders GO

分析新創建的表的頁的信息

---顯示跟蹤標志的狀態DBCC TRACESTATUS---開啟跟蹤標志DBCC TRACEON(3604,2588)--DBCC TRACEOFF(3604,2588)---獲取對象的數據頁,結構:數據庫、對象、顯示DBCC IND(Ixdata,Orders,-1)

/* 1:顯示所有分頁的信息,包括IAM分頁,數據分頁,所有存在的LOB分頁和行溢出頁,索引分頁-1: 顯示所有IAM、數據分頁、及指定對象上全部索引的索引分頁.-2: 顯示指定對象的所有IAM分頁0:顯示所有IAM、數據分頁.*/

DBCC IND的表結構

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

select so.name, so.object_id, sp.index_id, internals.total_pages, internals.used_pages, internals.data_pages,first_iam_page,  first_page, root_pagefrom sys.objects soinner join sys.partitions sp on so.object_id = sp.object_idinner join sys.allocation_units sa on sa.container_id = sp.hobt_idinner join sys.system_internals_allocation_units internals on internals.container_id = sa.container_idwhere so.object_id = object_id('orders')

最后三個字段分別是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個索引頁。

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

分析索引頁

---DBCC page的格式為(數據庫,文件id,頁號,顯示)DBCC page(Ixdata,1,89,3)

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

PAGE HEADER

分析數據頁

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

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

--插入20萬條記錄分析索引結構 DECLARE @ID INT=1WHILE(@ID<=200000)BEGININSERT INTO Orders(NAME)VALUES('商品'+CONVERT(NVARCHAR(20),@ID))SET @ID=@ID+1 ENDCREATE TABLE Page(  PageFID         TINYINT,   PagePID         INT,     IAMFID          TINYINT,   IAMPID          INT,   ObjectID        INT,  IndexID         TINYINT,  PartitionNumber TINYINT,  PartitionID     BIGINT,  iam_chain_type  VARCHAR(30),      PageType        TINYINT,   IndexLevel      TINYINT,  NextPageFID     TINYINT,  NextPagePID     INT,  PrevPageFID     TINYINT,  PrevPagePID     INT );GOINSERT INTO Page EXEC('DBCC IND(Ixdata,Orders,-1)')---查詢索引頁SELECT  [PageFID]      ,[PagePID]      ,[IAMFID]      ,[IAMPID]      ,[ObjectID]      ,[IndexID]      ,[PartitionNumber]      ,[PartitionID]      ,[iam_chain_type]      ,[PageType]      ,[IndexLevel]      ,[NextPageFID]      ,[NextPagePID]      ,[PrevPageFID]      ,[PrevPagePID]  FROM [Ixdata].[dbo].[Page]  WHERE PageType=2  go select so.name, so.object_id, sp.index_id, internals.total_pages, internals.used_pages, internals.data_pages,first_iam_page,  first_page, root_pagefrom sys.objects soinner join sys.partitions sp on so.object_id = sp.object_idinner join sys.allocation_units sa on sa.container_id = sp.hobt_idinner join sys.system_internals_allocation_units internals on internals.container_id = sa.container_idwhere so.object_id = object_id('orders') 

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

再分析89頁

---DBCC page的格式為(數據庫,文件id,頁號,顯示)DBCC page(Ixdata,1,89,3)

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

手繪存儲結構

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

大型對象 (LOB) 列

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

---創建測試表CREATE TABLE Orderslob(ID INT PRIMARY KEY IDENTITY(1,1),NAME CHAR(80)NOT NULL,Product NVARCHAR(MAX) NOT NULL,IDATE DATETIME NOT NULL DEFAULT(GETDATE()));GO---插入1000條測試數據DECLARE @ID INT=1WHILE(@ID<=1000)BEGININSERT INTO Orderslob(NAME,Product)VALUES(CONVERT(NVARCHAR(20),@ID)+'商品',REPLICATE(@ID,2))SET @ID=@ID+1 END--REPLICATE(@ID,200)GODBCC IND(Ixdata,Orderslob,1)

--查看2719數據頁的信息DBCC page(Ixdata,1,2719,1)

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

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

總結

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

備注:

作者:pursuer.chen

博客:http://www.cnblogs.com/chenmh

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須注明文章來源,且在文章開頭明顯處給明鏈接,否則保留追究責任的權利。

《歡迎交流討論》


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久在线观看视频| 亚洲欧美日韩一区二区在线| 久久久噜久噜久久综合| 不卡中文字幕av| 亚洲精品国产精品国自产在线| 国产精品亚洲网站| 久久久久日韩精品久久久男男| 国产精品成人久久久久| 亚洲电影av在线| 亚洲石原莉奈一区二区在线观看| 一夜七次郎国产精品亚洲| 国产999精品视频| 自拍偷拍亚洲一区| 国产视频精品久久久| 欧美亚洲第一页| 亚洲最大av在线| 国产精品一区二区久久久久| 亚洲综合大片69999| 91在线视频导航| 国产一区二区在线免费视频| 国语自产在线不卡| 国产在线拍揄自揄视频不卡99| 国产在线观看一区二区三区| 日韩av电影在线免费播放| 超碰91人人草人人干| 中文字幕亚洲天堂| 欧美视频二区36p| 亚洲欧美另类国产| 在线a欧美视频| 亚洲视频综合网| 色综合久综合久久综合久鬼88| 日韩男女性生活视频| 久久亚洲精品一区二区| 91嫩草在线视频| 91免费视频网站| 久久影视免费观看| 欧美亚洲第一区| 国产精品久久综合av爱欲tv| 欧美极品美女电影一区| 欧美黑人xxxx| 日本不卡免费高清视频| 亚洲精品久久久久久久久久久久| 欧美日韩国产精品一区二区不卡中文| 午夜精品久久17c| 成人午夜在线视频一区| 亚洲国产精品人人爽夜夜爽| 91wwwcom在线观看| 国产精品视频999| xxx欧美精品| 国产精品aaaa| 久久久国产精品视频| 亚洲欧美日韩天堂| 久久97久久97精品免视看| 精品偷拍各种wc美女嘘嘘| 日韩国产在线看| 欧美日韩一区二区免费视频| 日韩小视频在线观看| 国产精品久久99久久| 亚洲美女激情视频| www.亚洲男人天堂| 性色av一区二区三区在线观看| 久久久久久欧美| 国产精品久久久久久久久久ktv| 国产丝袜视频一区| 538国产精品一区二区在线| 欧美性资源免费| 日韩激情av在线免费观看| 日韩欧美精品网站| 日韩av三级在线观看| 久久久精品2019中文字幕神马| 精品国产一区二区三区久久久狼| 亚洲最大福利视频| 精品在线观看国产| 亚洲欧美国产精品va在线观看| 色综合老司机第九色激情| 韩国视频理论视频久久| 国产视频久久网| 97国产精品免费视频| 日韩中文娱乐网| 亚洲欧美精品suv| 欧美日韩国产麻豆| 久久精品久久久久久国产 免费| 国产精品永久免费| 亚洲自拍小视频| 精品无人区乱码1区2区3区在线| 91久久久久久久久久久| 国产精品网站大全| 亚洲网在线观看| 欧美亚洲另类激情另类| 91在线|亚洲| 久久久国产精品免费| 久久中文久久字幕| 日韩av手机在线看| 日韩欧美亚洲范冰冰与中字| 26uuu另类亚洲欧美日本老年| 国产成人av在线| 亚洲美女精品成人在线视频| xvideos成人免费中文版| 久久精品国产一区二区三区| 欧美激情亚洲激情| 亚洲人成网站777色婷婷| 亚洲精品国产美女| 国产成人一区二区| 国产精品旅馆在线| 国产人妖伪娘一区91| 亚洲综合av影视| 亚洲在线免费视频| 精品国产福利视频| 色噜噜国产精品视频一区二区| 中文字幕亚洲第一| 国内精品一区二区三区四区| 国产一区私人高清影院| 日韩一区二区欧美| 91九色单男在线观看| 欧美另类第一页| 国产精品久久久久久久久久久不卡| 欧美激情在线狂野欧美精品| 国产精品无av码在线观看| 欧美裸身视频免费观看| 久久69精品久久久久久久电影好| 亚洲欧美激情在线视频| 久久亚洲精品中文字幕冲田杏梨| 日韩av免费看网站| 亚洲国产精品美女| 97久久国产精品| 日韩视频一区在线| 亚洲娇小xxxx欧美娇小| 欧美日韩中文在线| 欧美激情va永久在线播放| 国产亚洲激情视频在线| 亚洲一区二区三区毛片| 成人xvideos免费视频| 中文字幕精品影院| 成人国产在线视频| 欧美电影免费看| 91精品国产乱码久久久久久蜜臀| 5566日本婷婷色中文字幕97| 成人免费观看网址| 91精品视频在线看| 日韩免费观看高清| 国产剧情日韩欧美| 国产91免费观看| 亚洲欧洲第一视频| 一本大道亚洲视频| 色综合91久久精品中文字幕| 亚洲国产精品va在线看黑人动漫| 欧美性69xxxx肥| 91免费看片在线| 欧美精品成人91久久久久久久| 亚洲国产精品美女| 久久久天堂国产精品女人| 奇米影视亚洲狠狠色| 亚洲人成在线电影| 精品欧美激情精品一区| 国产女同一区二区| 精品国产欧美一区二区三区成人| 亚洲欧洲午夜一线一品| 亚洲精品美女在线| 亚洲人成伊人成综合网久久久| 97在线视频一区| 国产国语videosex另类| 欧美体内谢she精2性欧美| 97超级碰碰碰久久久| 久久精品中文字幕免费mv|