亚洲香蕉成人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/索引體系結構/堆

概述

本篇文章是關于堆的存儲結構。堆是不含聚集索引的表(所以只有非聚集索引的表也是堆)。堆的 sys.partitions 中具有一行,對于堆使用的每個分區,都有 index_id = 0。默認情況下,一個堆有一個分區。當堆有多個分區時,每個分區有一個堆結構,其中包含該特定分區的數據。例如,如果一個堆有四個分區,則有四個堆結構;每個分區有一個堆結構。根據堆中的數據類型,每個堆結構將有一個或多個分配單元來存儲和管理特定分區的數據。每個堆中的每個分區至少有一個 IN_ROW_DATA 分配單元。如果堆包含大型對象 (LOB) 列,則該堆的每個分區還將有一個 LOB_DATA 分配單元。如果堆包含超過 8,060 字節行大小限制的可變長度列,則該堆的每個分區還將有一個 ROW_OVERFLOW_DATA 分配單元。有關分配單元的詳細信息,

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

正文堆結構

可以通過掃描 IAM 頁對堆進行表掃描或串行讀操作來找到容納該堆的頁的擴展盤區。因為 IAM 按擴展盤區在數據文件內存在的順序表示它們,所以這意味著串行堆掃描連續沿每個文件進行。使用 IAM 頁設置掃描順序還意味著堆中的行一般不按照插入的順序返回。

頁面的組成

一個SQL數據頁面=標頭+數據行+剩余空間+行偏移表(如果表中存在大數據類型字段)+溢出表(如果存在)

行偏移

---測試數據CREATE TABLE Theap(ID INT IDENTITY(1,1) NOT NULL,NAME NVARCHAR(MAX) NOT NULL,IDATE DATETIME DEFAULT(GETDATE()) NOT NULL)GO---插入1000條測試數據DECLARE @ID INT=1WHILE(@ID<=1000)BEGININSERT INTO Theap(NAME)VALUES((@ID))SET @ID=@ID+1 ENDGOSELECT * FROM Theap---開啟跟蹤標志DBCC TRACEON(3604,2588)--DBCC TRACEOFF(3604,2588)---獲取對象的數據頁,結構:數據庫、對象、顯示DBCC IND(Ixdata,Theap,-1)SELECT * FROM sys.system_internals_allocation_units WHERE container_id=72057594039566336

分析114頁

DBCC page(Ixdata,1,114,3)

整個數據頁有四部分組成

1.頁面在內存中的映射信息(BUFFER:)

2. 頁頭部分(PAGE HEADER):記錄了頁號、頁類型、記錄數,LSN及其他信息,在上一章已經講過

3. 數據部分(DATA):以16進制格式存儲行記錄(從第96個字節開始)

4. 行偏移部分(OFFSET TABLE):以倒序的順序記錄了行記錄的指針位置,這個使用2的顯示方式比較明顯看出

看看一行記錄在頁面中是怎樣記錄的

00000000: 30001000 01000000 76ff7401 64a40000 †0.......v.t.d... 00000010: 0300b801 00190031 00†††††††††††††††††.......1.

1字節:30>00110000 ;右邊第一位開始是0位,第4位和第5位是1,由于在2008中null bit map總是存在的,所以只考慮第五位,即存在變長字段。

1字節:00;狀態位B在SQLServer2005/2008中未啟用,所以為00

2字節:1000;這兩個字節是表示定長列的字節數,反過來排0010=1*16=16個字節,表中的定長列ID(4個字節)+IDATE(8個字節)+4個字節(默認加的)=16個字節

N個字節:01000000 76ff7401 64a40000;這N個字節是定長字段的內容,總共12個字節

2個字節:0300;表中的字段數,由于表中只有3個字段所以用0300表示

1個字節:b8>10111000;這個字節表示主要是判斷對應的字段內容是否有空值,1代表允許為空,前三個字段都不允許為空,而且表只有三個字段所以不用看后面。

2個字節:01 00;這個字段表示變長列的個數,根據剛才說的方法倒過來00 01=1個字段,表中頁只有NAME字段是變長字段。

2個字節*變長字段的個數:1900;由于表中只有一個變長字段,所以只有兩個字節,表示第一個變長列的終止位置=25

N個字節:變長字段的內容,3100轉換成字符剛好是‘1’

在線16進制轉字符:http://www.bejson.com/tools/0x/

查詢

SELECT [ID]      ,[NAME]      ,[IDATE]  FROM [Ixdata].[dbo].[Theap]  WHERE NAME='1'      SELECT [ID]      ,[NAME]      ,[IDATE]  FROM [Ixdata].[dbo].[Theap]  WHERE NAME='900'

分析查詢可以看出無論你查詢的是'1'還是'900',都是掃描一次,邏輯讀取4次,因為存在4個頁,用ID去查也是一樣.

行溢出

CREATE TABLE Theapover(ID INT IDENTITY(1,1) NOT NULL,NAME VARCHAR(5000) NOT NULL,NAME1 VARCHAR(5000) NOT NULL,IDATE DATETIME DEFAULT(GETDATE()) NOT NULL)GO---插入1000條測試數據DECLARE @ID INT=1WHILE(@ID<=1000)BEGININSERT INTO Theapover(NAME,NAME1)VALUES(REPLICATE(1,5000),REPLICATE(2,5000))SET @ID=@ID+1 ENDGOSELECT * FROM TheapoverORDER BY IDGODBCC IND(Ixdata,Theapover,-1)SELECT * FROM sys.system_internals_allocation_units WHERE container_id=72057594039828480

總共插入了1000條記錄,一行占一頁再加上兩個IAM頁剛好2002頁,

存在兩個IAM頁,分別是3281和3283頁,還有一個比較特殊的頁3280頁,3280頁是溢出數據里面的根頁,等一下看一下這頁的數據。

分析IAM頁

DBCC page(Ixdata,1,3283,3)

分析溢出頁

DBCC page(Ixdata,1,3282,3)

注意:不是堆頁和溢出頁就只能一一對應,由于當前表中堆頁容納不下兩條記錄所以就導致了堆頁和溢出頁一樣,當堆頁可以存多條記錄的時候就會出現一個堆頁對應多個溢出頁。

測試查詢

  SELECT  [ID]      ,[NAME]      ,[NAME1]      ,[IDATE]  FROM [Ixdata].[dbo].[Theapover]  where ID=500

當我繼續往堆表里插入數據直到表超過4G的時候會有新的IAM頁生成,而且IAM頁之間存在鏈關系(數據頁)。

查詢發現新生成的3135IAM頁種的數據頁的行溢出指向的是新生成的511256IAM頁的溢出頁,這樣的話IAM頁之間的鏈關系對查詢效率貌似沒有什么改善的好處。

1. IAM用于查找分配給heap的所有數據頁信息,IAM頁中記錄了所有的頁面的頁id。

2. 對于大多數較小的heap表來說,僅需要一個IAM頁就可以管理其頁面。

3. 若heap表大于4GB或包含LOB數據類型的話,則會包含多個IAM頁面。

4. 當查詢要獲取heap表的所有記錄時,SQL Server使用IAM頁來掃描heap表

總結

堆表的頁是沒有規律的不存在頁鏈,所以導致堆表的查詢效率很差,當查詢一個10萬條記錄的堆表邏輯讀取就需要10萬次,如果堆表的數據量很大需要多次進行物理讀獲取頁面的時候對于IO的消耗是非常大的,建議表都應該建聚集索引。

備注:

作者:pursuer.chen

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

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

《歡迎交流討論》


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩亚洲视频| 日韩av免费一区| 91日本在线视频| 亚洲精品乱码久久久久久按摩观| 日韩激情第一页| 亚洲激情视频网| 精品久久久久久久久久久久久久| 日韩欧美在线视频观看| 久久精品2019中文字幕| 成人黄色激情网| 国产区精品在线观看| 日韩在线观看免费高清完整版| 日韩av一卡二卡| 欧美国产乱视频| 亚洲电影免费观看高清完整版在线| 午夜精品久久久久久久99热| 国产一区二区三区在线| 亚洲香蕉成视频在线观看| 国产午夜精品理论片a级探花| 亚洲欧美日韩区| 这里只有精品视频在线| 国产精品无av码在线观看| 91国内揄拍国内精品对白| 精品二区三区线观看| www.欧美精品一二三区| 538国产精品一区二区在线| 久久九九免费视频| 国产欧美日韩免费看aⅴ视频| 欧美国产激情18| 蜜臀久久99精品久久久久久宅男| 欧美激情一区二区三区在线视频观看| 精品少妇一区二区30p| 国产成人在线亚洲欧美| 日韩中文字幕免费看| 亚洲国产精品免费| 国产日本欧美一区二区三区在线| 久久久噜久噜久久综合| 日韩激情第一页| 亚洲国产日韩欧美综合久久| wwwwwwww亚洲| 日韩欧美国产激情| 精品亚洲一区二区三区四区五区| 51久久精品夜色国产麻豆| 亚洲aaaaaa| 久久久精品免费视频| 国产精品爱久久久久久久| 热门国产精品亚洲第一区在线| 91精品免费看| 成人精品久久av网站| 日韩精品亚洲精品| 日韩av在线电影网| 久久精品国产一区二区电影| 国产精品免费久久久| 久久手机免费视频| 欧美午夜精品久久久久久人妖| 91精品国产自产在线观看永久| 亚洲高清福利视频| 日韩欧美中文字幕在线观看| 日韩电影免费观看在线观看| 日本最新高清不卡中文字幕| 亚洲自拍偷拍色图| 亚洲精品欧美一区二区三区| 久久久精品亚洲| 欧美成人免费在线观看| 亚洲深夜福利网站| 午夜美女久久久久爽久久| 九色成人免费视频| 91福利视频网| 2020久久国产精品| 成人欧美一区二区三区在线| 久久成人一区二区| 91在线观看免费高清| 欧美日韩亚洲精品一区二区三区| 国产日本欧美一区| 清纯唯美日韩制服另类| 亚洲加勒比久久88色综合| 亚洲曰本av电影| 国产精品亚发布| 欧美在线精品免播放器视频| 91国语精品自产拍在线观看性色| 久久国内精品一国内精品| 精品美女永久免费视频| 欧美xxxx18国产| 精品久久久久久久久国产字幕| 66m—66摸成人免费视频| 亚洲国产精品电影在线观看| 91久久精品一区| 国产suv精品一区二区三区88区| 欧美天天综合色影久久精品| 欧美性高潮在线| 亚洲香蕉av在线一区二区三区| 亚洲偷熟乱区亚洲香蕉av| 亚洲国产天堂久久综合网| 国产成人综合av| 国产成人亚洲精品| 欧美午夜精品久久久久久浪潮| 5252色成人免费视频| 日本精品视频在线播放| 一本色道久久88亚洲综合88| 在线免费观看羞羞视频一区二区| 日韩电影中文字幕一区| 国外成人在线视频| 国产精品海角社区在线观看| 欧美成人亚洲成人日韩成人| 午夜精品在线观看| 亚洲国产成人精品电影| 成人a在线视频| 亚洲淫片在线视频| 欧美电影在线观看完整版| 国产极品精品在线观看| 日韩av片电影专区| 日韩欧美精品免费在线| 欧美最顶级丰满的aⅴ艳星| 国产99久久精品一区二区永久免费| 国产91久久婷婷一区二区| 国产精品美乳在线观看| 久久精品欧美视频| 51久久精品夜色国产麻豆| 久久久久国产精品www| 海角国产乱辈乱精品视频| 中文字幕自拍vr一区二区三区| www国产精品视频| 久久国产精品久久精品| 一区二区三区四区精品| 在线视频中文亚洲| 国产成人在线视频| 91久久在线视频| 精品国产乱码久久久久久虫虫漫画| 久久久www成人免费精品张筱雨| 日韩有码在线播放| 亚洲精品videossex少妇| 亚洲午夜未删减在线观看| 一级做a爰片久久毛片美女图片| 国产精品久久久久久久久久ktv| 欧美日韩亚洲一区二区三区| 欧美激情按摩在线| 久久综合久久88| 国产精品va在线播放我和闺蜜| 亚洲国产精品成人va在线观看| 九九热r在线视频精品| 亚洲黄页视频免费观看| 国产精品精品视频一区二区三区| 亚洲欧美在线一区| 欧美国产中文字幕| 久久99热这里只有精品国产| 狠狠综合久久av一区二区小说| 亚洲三级免费看| 亚洲电影av在线| 在线观看欧美成人| 欧美成人精品h版在线观看| 亚洲综合国产精品| 欧美一级视频在线观看| 成人激情视频在线播放| 欧美日韩亚洲一区二区| 国产在线视频2019最新视频| 成人在线视频福利| 亚洲国产中文字幕久久网| 亚洲欧美日韩精品久久| 久久99久久99精品免观看粉嫩| 欧美性xxxxx| 国产91成人在在线播放| 欧美激情网友自拍| 一本色道久久88精品综合| 亚洲欧美国产日韩中文字幕|