行サイズ計算テスト

5144 ワード

データベースの各行がどれだけのスペースを占めているのか、ここで、小さなテストをします~~~ここではスタックテーブルの計算しかしていませんが、インデックスが含まれている場合は、ドキュメントに従ってインデックスの列も加えればOKです~
 
テストテーブルを作成し、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+:列が長くなる各塗りつぶし列
 
この一言を検証して、行ごとのオーバーヘッド
  • 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