行サイズ計算テスト
5144 ワード
データベースの各行がどれだけのスペースを占めているのか、ここで、小さなテストをします~~~ここではスタックテーブルの計算しかしていませんが、インデックスが含まれている場合は、ドキュメントに従ってインデックスの列も加えればOKです~
テストテーブルを作成し、DBCC PAGEでSlotの情報を印刷します.
それから私は直接slotのニュースを貼って分析しましょう~~
-------------------------------------------------------------------------------------------------------------------------------------
Slot 0, Offset 0x60, Length 51, DumpStyle BYTE
Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNS
Record Size = 51
Memory Dump @0x0A93C060
00000000: 30000e00 61613120 206a6f61 6e320500 †0...aa1 joan2..
00000010: 00030023 002c0033 00323232 32323232 †...#.,.3.2222222
00000020: 32323261 6f616f6e 666f656e 31313131 †222aoaonfoen1111
00000030: 313131†††††††††††††††††††††††††††††††111
4 8 12 16 20 24 28 32 36 40 44 48 52
30000e00 61613120 206a6f61 6e320500 00030023 002c0033 00323232 3232323 32323261 6f616f6e 666f656e 31313131 313131
1 2 3 4 5 6 7 8 9
1:固定長列終了位置
2:固定長第1列(col 1)
3:固定長2列目(col 3)--後にもっと多くの列がある場合は、後ろの列に進みます
4:行に含まれるカラムの合計数.この例では5
5:Null保守:計算方法2+(Null列可能+7)/8
6:各可変列の終了位置.長さ計算2+(可変列数*2)
7+:列が長くなる各塗りつぶし列
この一言を検証して、行ごとのオーバーヘッド ix bytes per row for status information and length information. One bit per fixed width column, rounding up to the nearest byte. If there are any variable length columns - four bytes for the first, plus two bytes for each additional variable length column An additional two bytes per row for the offset pointer located at the end of the page.
-----------------------------------------------------------------------------------------------------
テストを経て、无论列の顺番はどのように并べて、まず定长のフィールドを先に并べて、それから长くなるフィールドを并べます~いいでしょう~テストは终わります
弟は才能がない~みんなが不足を指摘することを歓迎します
参照先:
http://technet.microsoft.com/zh-cn/library/ms189124.aspx
PS:上の2つのDBCCの文法
dbcc ind(dbname|dbid, tbname|tbid,-1)
dbcc page ( {'dbname' | dbid}, filenum, pagenum [, printopt={0|1|2|3} ])
The filenum and pagenum parameters are taken from the page IDs that come from various system tables and appear in DBCC or other system error messages. A page ID of, say, (1:354) has filenum = 1 and pagenum = 354.
The printopt parameter has the following meanings:
0 - print just the page header 1 - page header plus per-row hex dumps and a dump of the page slot array (unless its a page that doesn't have one, like allocation bitmaps) 2 - page header plus whole page hex dump 3 - page header plus detailed per-row interpretation
テストテーブルを作成し、DBCC PAGEでSlotの情報を印刷します.
CREATE TABLE TstA
(
col1 CHAR(5) NULL,
col2 CHAR(5) NULL,
col3 VARCHAR(5) NULL,
col4 VARCHAR(10) NULL,
col5 VARCHAR(50) NULL
)
INSERT INTO TstA (col1,col2,col3,col4,col5) VALUES ('aa1','2222222222','joan2','aoaonfoen','1111111')
dbcc ind(TestDB, Object_id('TstA'),-1)
DBCC PAGE(TestDB,1,11957,1)
それから私は直接slotのニュースを貼って分析しましょう~~
-------------------------------------------------------------------------------------------------------------------------------------
Slot 0, Offset 0x60, Length 51, DumpStyle BYTE
Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP VARIABLE_COLUMNS
Record Size = 51
Memory Dump @0x0A93C060
00000000: 30000e00 61613120 206a6f61 6e320500 †0...aa1 joan2..
00000010: 00030023 002c0033 00323232 32323232 †...#.,.3.2222222
00000020: 32323261 6f616f6e 666f656e 31313131 †222aoaonfoen1111
00000030: 313131†††††††††††††††††††††††††††††††111
4 8 12 16 20 24 28 32 36 40 44 48 52
30000e00 61613120 206a6f61 6e320500 00030023 002c0033 00323232 3232323 32323261 6f616f6e 666f656e 31313131 313131
1 2 3 4 5 6 7 8 9
1:固定長列終了位置
2:固定長第1列(col 1)
3:固定長2列目(col 3)--後にもっと多くの列がある場合は、後ろの列に進みます
4:行に含まれるカラムの合計数.この例では5
5:Null保守:計算方法2+(Null列可能+7)/8
6:各可変列の終了位置.長さ計算2+(可変列数*2)
7+:列が長くなる各塗りつぶし列
この一言を検証して、行ごとのオーバーヘッド
-----------------------------------------------------------------------------------------------------
テストを経て、无论列の顺番はどのように并べて、まず定长のフィールドを先に并べて、それから长くなるフィールドを并べます~いいでしょう~テストは终わります
弟は才能がない~みんなが不足を指摘することを歓迎します
参照先:
http://technet.microsoft.com/zh-cn/library/ms189124.aspx
PS:上の2つのDBCCの文法
dbcc ind(dbname|dbid, tbname|tbid,-1)
dbcc page ( {'dbname' | dbid}, filenum, pagenum [, printopt={0|1|2|3} ])
The filenum and pagenum parameters are taken from the page IDs that come from various system tables and appear in DBCC or other system error messages. A page ID of, say, (1:354) has filenum = 1 and pagenum = 354.
The printopt parameter has the following meanings:
0 - print just the page header 1 - page header plus per-row hex dumps and a dump of the page slot array (unless its a page that doesn't have one, like allocation bitmaps) 2 - page header plus whole page hex dump 3 - page header plus detailed per-row interpretation