溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SQL Server內(nèi)幕之?dāng)?shù)據(jù)行的結(jié)構(gòu)

發(fā)布時(shí)間:2020-07-25 23:06:46 來(lái)源:網(wǎng)絡(luò) 閱讀:1604 作者:易語(yǔ)隨風(fēng)去 欄目:關(guān)系型數(shù)據(jù)庫(kù)

表的數(shù)據(jù)行具有圖6-5 所示的一般結(jié)構(gòu) (只要數(shù)據(jù)以未壓縮的形式存儲(chǔ))。此格式稱為 FixedVar 格式, 因?yàn)樗泄潭ㄩL(zhǎng)度列的數(shù)據(jù)首先存儲(chǔ), 后跟所有可變長(zhǎng)度列的數(shù)據(jù)。表6-7 顯示了存儲(chǔ)在每個(gè) FixedVar 行中的信息。

SQL Server內(nèi)幕之?dāng)?shù)據(jù)行的結(jié)構(gòu)


SQL Server內(nèi)幕之?dāng)?shù)據(jù)行的結(jié)構(gòu)

狀態(tài)位 A 包含指示行屬性的位圖。這些位具有以下含義:


Bit 0 表示特殊的版本控制信息。在 SQL server 2012 中, 這始終是0。

Bits 1到3作為3位值, 

0 (000) 表示主記錄, 

1 (001) 表示轉(zhuǎn)發(fā)的記錄, 

2 (010) 表示轉(zhuǎn)發(fā)存根, 

3 (011) 指示一個(gè)索引記錄, 

4 (100) 指示一個(gè) BLOB 片段或行溢出數(shù)據(jù), 

5 (101) 表示虛影索引記錄, 

6 (110) 表示虛影數(shù)據(jù)記錄, 

7 (111) 表示虛影版本記錄。


Bit 4 表示存在空位圖。在 SQL server 2012 中, 即使在任何列中都不允許有 null, 

也始終存在空位圖。


Bit 5 表示行中存在可變長(zhǎng)度列。


Bit 6 表示該行包含版本控制信息。


Bit 7 在 SQL server 2012 中不使用。



狀態(tài)位 B 字段中使用的唯一位表示該記錄是虛影轉(zhuǎn)發(fā)的記錄。



您可以在圖6-5 和表6-7 中看到第三個(gè)和第四個(gè)字節(jié)指示行的固定長(zhǎng)度部分的長(zhǎng)度。如圖6-5 所示, 它的長(zhǎng)度不包括2個(gè)字節(jié)的列數(shù)和空位圖, 這取決于表中列的總數(shù), 這是可變長(zhǎng)度。解釋這些位中數(shù)據(jù)的另一種方法是, 在該行中可以找到列數(shù)的位置。例如, 如果第三個(gè)和第四個(gè)字節(jié) (字節(jié) 2–3) 包含值 0x0016 (即十進(jìn)制 22), 則表示該行不僅在列數(shù)的值之前有22個(gè)字節(jié), 而且還意味著可以在字節(jié)22中找到列數(shù)的值。



在每個(gè)固定長(zhǎng)度或可變長(zhǎng)度數(shù)據(jù)塊中, 數(shù)據(jù)以創(chuàng)建表的列順序存儲(chǔ)。例如, 假設(shè)使用以下命令創(chuàng)建了一個(gè)表:


CREATE TABLE Test1

(

Col1 int NOT NULL,

Col2 char(25) NOT NULL,

Col3 varchar(60) NULL,

Col4 money NOT NULL,

Col5 varchar(20) NOT NULL

);


此行的固定長(zhǎng)度數(shù)據(jù)部分包含 Col1 的數(shù)據(jù), 后跟 Col2 的數(shù)據(jù), 后跟 Col4 的數(shù)據(jù)??勺冮L(zhǎng)度數(shù)據(jù)部分包含 Col3 的數(shù)據(jù), 后跟 Col5 的數(shù)據(jù)。對(duì)于僅包含固定長(zhǎng)度數(shù)據(jù)的行, 以下值為 true。


數(shù)據(jù)行第一個(gè)字節(jié)的第一個(gè)十六進(jìn)制數(shù)字為 1, 表示不存在可變長(zhǎng)度列。(第一個(gè)十六進(jìn)制數(shù)字包括位4到 7; bits 6 和7總是 0, 如果不存在變長(zhǎng)列, 則位5也是0。位4始終為 1, 因此四位的值顯示為1。


數(shù)據(jù)行結(jié)束于空位圖之后, 它遵循固定長(zhǎng)度的數(shù)據(jù) (即, 圖6-5 中顯示的陰影部分不會(huì)存在于只有固定長(zhǎng)度數(shù)據(jù)的行中)。


每個(gè)數(shù)據(jù)行的總長(zhǎng)度是相同的。



具有任何可變長(zhǎng)度列的數(shù)據(jù)行有一個(gè)列偏移量數(shù)組, 每個(gè)非 NULL 可變長(zhǎng)度列都有一個(gè)2字節(jié)的條目, 指示列在其中結(jié)束的行中的位置。(術(shù)語(yǔ)偏移和位置不是完全可互換的。偏移量是基于0的, 而位置是基于1的。偏移量為7的字節(jié)位于行中的第八字節(jié)位置。)存儲(chǔ)具有 NULL 值的可變長(zhǎng)度列涉及一些特殊問(wèn)題, 如后面的 "null 和可變長(zhǎng)度列" 部分所討論的。


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI