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

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

SQL Server 存儲(2/8):理解數據記錄結構

2024-08-31 00:54:32
字體:
來源:轉載
供稿:網友
SQL Server 存儲(2/8):理解數據記錄結構

在SQL Server :理解數據頁結構我們提到每條記錄都有7 bytes的系統行開銷,那這個7 bytes行開銷到底是一個什么樣的結構,我們一起來看下。

數據記錄存儲我們具體的數據,換句話說,它存在堆表里,或者存在聚集索引的葉子節點。數據記錄結構是為了讓SQL Server更高效的管理數據。我們來看下數據記錄結構示意圖:

上圖中藍色部分是所有數據記錄部分(即系統行開銷,大小基于列個數,等于或大于7 bytes),綠色部分是表結構里取決于定長/變長列的數據記錄部分(實際存放的數據,大小基于實際數據)。

行頭系統數據:

用做狀態位1的第1字節(8位)是用來定義記錄的屬性:

  • 第0位:版本信息,在SQL Server 2008里始終是0;
  • 第1-3位:這3位用來定義記錄類型;
    • 0 數據記錄(data record)
    • 1 轉發記錄(Forwarded record)
    • 2 轉發存根(a forwarding stub)
    • 3 索引記錄(Index record)
    • 4 二進制堆碎片或行溢出數據(blob fragment or row overflow data)
    • 5 鬼影索引記錄(Ghost index record)
    • 6 鬼影數據記錄(ghost data record)
    • 7 鬼影版本記錄(ghost version record)
  • 第4位:存在空值位圖(Null bitmap)或沒有。在SQL Server 2008里沒有不為空的列也會有空值位圖(Null bitmap);
  • 第5位:表示是否存在變長列;
  • 第6位:表示該列包含版本信息;
  • 第7位:在SQL Server里未使用;

用作狀態位2的第2字節(8位)。只有1位用來表示這條記錄是否為鬼影轉發記錄(ghost forwarded record)。

由行頭開始到定長列結尾長度:

下2個字節用來存儲行頭開始到定長列結尾長度。它包含2個狀態位,2個字節用作這個列表示在表中定長數據的實際長度。例如如果表里沒有定長列,這個列的值會是4。這和頁頭列pminlen顯示的值是一樣的。

所有定長列字段值(Fixed_Data_Size):

下n個字節用來存儲在表中的定長數據,n就是在表中所有定長列的長度。如果表里的所有列都是變長列,這一部分就沒有。

空值位圖(Null_Bitmap):

下2個字節用來存儲表里的列數。

下n個字節用作空值位圖,每個bit對應一個列,1表示對應列為空。n的值為:列數 / 8,將值取整。

Variable_Data_Size:

下2個字節用來存儲表里變長列個數。

下n個字節用來存儲每個變長列結束為止的偏移量。每個變長列需要2字節,n的值為:變長列數 * 2 。

最后n個字節用來存儲所有變長列值,n的值為所有變長列的實際長度的總長度。

我們來看一個具體的例子:

創建數據庫,并插入2條記錄

 1 USE [InternalStorageFormat] 2 GO 3  4 IF EXISTS ( SELECT  * 5             FROM    sysobjects 6             WHERE   id = OBJECT_ID(N'[dbo].[Customers]') 7                     AND OBJECTPROPERTY(id, N'IsUserTable') = 1 ) 8     DROP TABLE dbo.Customers 9 10 CREATE TABLE Customers11 (12    FirstName CHAR(50) NOT NULL,13    LastName CHAR(50) NOT NULL,14    Address CHAR(100) NOT NULL,15    ZipCode CHAR(5) NOT NULL,16    Rating INT NOT NULL,17    ModifiedDate DATETIME NOT NULL,18 )19 GO20 21 22 INSERT INTO dbo.Customers23         ( FirstName ,24           LastName ,25           Address ,26           ZipCode ,27           Rating ,28           ModifiedDate29         )30 VALUES  ( 'Woody' , -- FirstName - char(50)31           'Tu' , -- LastName - char(50)32           'ZUOQIAO YOUXI TOWN LINHAI CITY' , -- Address - char(50)33           '0000' , -- ZipCode - char(5)34           1 , -- Rating - int35           '2015-05-07 10:09:51'  -- ModifiedDate - datetime36         )37         go 2

使用DBCC IND命令查看表對應頁列表:

1 DBCC IND('InternalStorageFormat','Customers',-1)

我們看到數據頁號為79。

使用DBCC PAGE命令查看頁信息:

1 DBCC TRACEON(3604)2 DBCC PAGE(InternalStorageFormat,1,79,3)3 GO  

在頁頭pminlen的值是221,包括定長列的總長217 bytes(50+50+100+5+4+8),2 bytes用作狀態位(行頭系統開銷),2 byte 用作由行頭開始到定長列結尾長度。

在記錄槽提到的長度224,包括頁頭pminlen的值,1 byte用作空值位圖(6/8 取整為1)和2 bytes 的字段個數。

我們來看一個變長列的表。

創建表并插入數據后,查看表對應的頁:

 1 CREATE TABLE VariableLength( 2    Title         CHAR(10) NOT NULL, 3    FirstName     VARCHAR(100), 4    Lastname      VARCHAR(100), 5    email         VARCHAR(50),  6    dob           date NOT NULL, 7    phone         CHAR(10), 8    Countrycode   CHAR(3), 9    Designation   VARCHAR(100),10    PersonalPreference VARCHAR(100)11 )12 GO13 INSERT INTO VariableLength VALUES ('Mr','Woody','Tu','smartgz@QQ.com','2015-5-7','XXXXXXXXXX','Chn','DBA','Nothing Spl')14 GO15 DBCC IND('InternalStorageFormat','VariableLength',-1)

我們看到數據頁號為202。

使用DBCC PAGE命令查看頁信息:

1 DBCC TRACEON(3604)2 GO3 DBCC PAGE('InternalStorageFormat',1,202,3)--記得根據你的實際數據庫,修改頁號202

pminlen值為30,包含:

  • 1 byte 狀態位1
  • 1 byte 狀態為2
  • 2 bytes 存儲行頭開始到定長列結尾長度
  • 26 bytes 所有定長列總長度(10+3+10+3:tittle,dob,phone,countrycode)
    • Title CHAR(10) NOT NULL

    • dob date NOT NULL

    • phone CHAR(10)

    • Countrycode CHAR(3)

可以用下列語句驗證下定長列總長度:

1 SELECT DATALENGTH(Title) title,DATALENGTH(dob) dob,DATALENGTH(phone) phone,DATALENGTH(Countrycode) countrycode FROM VariableLength

在槽0顯示的81長度包含:

  • 1 byte 狀態位1
  • 1 byte 狀態為2
  • 2 bytes 存儲行頭開始到定長列結尾長度
  • 26 bytes 所有定長列總長度(10+3+10+3:tittle,dob,phone,countrycode)
    • Title CHAR(10) NOT NULL

    • dob date NOT NULL

    • phone CHAR(10)

    • Countrycode CHAR(3)

  • 2 bytes 存儲列個數
  • 2 bytes 用作空值位圖,字段個數/8后取整,即 9/8 得到2
  • 2 bytes 存儲變長列個數
  • 10 bytes 用來存儲每個變長列結束位置的偏移量 變長列個數 * 2,即 5 * 2 得到10,5個變長列包含:
    • FirstName VARCHAR(100)

    • Lastname VARCHAR(100)

    • email VARCHAR(50)

    • Designation VARCHAR(100)

    • PersonalPreference VARCHAR(100)

  • 35 bytes 用來存儲所有變長列的實際長度,這個可以使用下列語句得到
1 SELECT DATALENGTH(FirstName)+DATALENGTH(Lastname)+DATALENGTH(email)+2 DATALENGTH(Designation)+DATALENGTH(PersonalPreference) FROM VariableLength

總結下每條記錄的系統行開銷:

行頭系統數據(2 bytes)+由行頭開始到定長列結尾長度(2 bytes)+列個數(2 bytes)+空值位圖數據(取整(列個數/8) n bytes)

2 bytes + 2 bytes + 2 bytes + 取整(列個數/8)

當列個數小于等于8時,系統行開銷始終是7 bytes,往上沒增加8列,增加1 bytes,即系統系統行開銷始終大于等于7 bytes。

對于在SQL Server里數據記錄的存儲格式,希望你已經有了清晰的認識。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
夜夜躁日日躁狠狠久久88av| 日韩欧美精品网站| 欧美亚洲午夜视频在线观看| 97国产精品视频| 久久久久久久久中文字幕| 91在线观看免费高清完整版在线观看| 亚洲国产精久久久久久| 神马久久久久久| 中文字幕日韩精品在线观看| 欧美成aaa人片在线观看蜜臀| 欧美在线观看www| 欧美激情精品久久久| 久久久久免费精品国产| 亚洲精品国偷自产在线99热| 欧美在线视频免费播放| 97碰碰碰免费色视频| 国产精品一区二区久久久久| 91精品久久久久久久久久久久久久| 欧美日韩在线观看视频小说| 国产日本欧美一区二区三区| 国产欧美在线视频| 欧美黄色www| 欧美大片网站在线观看| 亚洲影视九九影院在线观看| 国产区精品视频| 色偷偷偷亚洲综合网另类| 亚洲欧洲日本专区| 美女黄色丝袜一区| 亚洲成av人乱码色午夜| 青青草国产精品一区二区| 亚洲国产天堂久久国产91| 91精品国产亚洲| 国产精品一区二区av影院萌芽| 欧美激情一级二级| 亚洲跨种族黑人xxx| 91精品国产91久久久久久不卡| 国产精品中文久久久久久久| 日韩精品极品视频免费观看| 欧洲美女免费图片一区| 91精品国产亚洲| 亚洲综合精品伊人久久| 丝袜亚洲欧美日韩综合| 亚洲精品综合久久中文字幕| 日韩高清免费在线| 奇米成人av国产一区二区三区| 国产精品视频资源| 国产精品中文字幕久久久| 国产日本欧美一区二区三区在线| 色久欧美在线视频观看| 91中文精品字幕在线视频| 欧美日韩美女在线观看| 欧美日韩国产va另类| 国产剧情日韩欧美| 久久久久久成人精品| 亚洲激情视频在线观看| 日韩一区二区精品视频| 中文字幕精品一区二区精品| 久久久视频在线| 91精品国产91久久久| 在线精品播放av| 久久精品成人欧美大片| 国产做受高潮69| 性视频1819p久久| xvideos国产精品| 久久久精品免费视频| 欧美国产日韩一区二区在线观看| 欧美主播福利视频| 日韩欧美成人网| 国产日本欧美一区二区三区| 久久久久久中文字幕| 亚洲色图13p| 亚洲日本成人女熟在线观看| 国产成人亚洲综合青青| 欧美日韩中文字幕在线| 久久久久久久久久久免费精品| 国产精品日韩欧美综合| 国产日韩av在线播放| 亚洲国产欧美在线成人app| 精品香蕉在线观看视频一| 精品电影在线观看| 亚洲成人av中文字幕| 一道本无吗dⅴd在线播放一区| 国产婷婷色综合av蜜臀av| 91网站免费看| 亚洲精品99久久久久中文字幕| 欧美一级电影免费在线观看| 国产小视频91| 日韩日本欧美亚洲| 91精品国产网站| 亚洲欧洲免费视频| 亚洲va男人天堂| 欧美亚洲伦理www| 国产精品美女无圣光视频| 亚洲乱码一区av黑人高潮| 久久免费国产视频| 欧美激情三级免费| 高清欧美性猛交| 午夜精品视频网站| 久久99视频免费| 精品中文字幕在线观看| 国产精品福利网站| 亚洲精品中文字| 最近2019年日本中文免费字幕| 不卡伊人av在线播放| 国产精品久久久久久久久久久久久久| 欧美精品videossex88| 国产精品激情自拍| 欧美激情一区二区三区在线视频观看| 日韩美女毛茸茸| 国产精品九九久久久久久久| 黄色91在线观看| 欧美日韩电影在线观看| 亚洲成人黄色在线观看| 亚洲第一免费网站| 欧美日韩亚洲视频| 91精品国产高清久久久久久| 日韩在线资源网| 欧美激情视频网| 欧美午夜片欧美片在线观看| 亚洲精品ady| 欧美一级大片视频| 日韩**中文字幕毛片| 最近2019中文字幕在线高清| 久久视频免费观看| 欧美精品一二区| 色中色综合影院手机版在线观看| 欧美一区三区三区高中清蜜桃| 精品国产一区二区三区久久久| 日韩三级成人av网| 亚洲激情在线视频| 97精品国产97久久久久久| 岛国av午夜精品| 96国产粉嫩美女| 高潮白浆女日韩av免费看| 久久全国免费视频| 国产在线拍揄自揄视频不卡99| 国产日韩欧美中文在线播放| 91精品在线影院| 久久久久久国产精品| 日韩视频免费观看| 午夜精品久久久久久99热| 国产亚洲人成a一在线v站| 中文字幕日韩欧美在线视频| 久久天天躁夜夜躁狠狠躁2022| 97国产精品久久| 欧美精品成人91久久久久久久| 国产精品久久久久久久久久尿| 黑人巨大精品欧美一区二区一视频| 久久精品国产2020观看福利| 亚洲人成人99网站| 一区二区三区动漫| 在线看片第一页欧美| 亚洲桃花岛网站| 中文精品99久久国产香蕉| 久久九九国产精品怡红院| 亚洲精品www久久久久久广东| 欧美激情中文字幕乱码免费| 亚洲成人网在线观看| 亚洲欧美日本另类| 97精品在线视频| 粉嫩老牛aⅴ一区二区三区| 国产91精品视频在线观看| 97国产成人精品视频| 日本精品视频在线观看|