BIT类型在SQL Server中的存储大小(二)

日期: 2008-08-25 作者:深蓝 来源:TechTarget中国 英文

  2.多个BIT类型的列之间使用变长数据类型列分开,则去掉变长列,然后看连续的BIT类型列的个数,每列占用一个位,如果多余了8列那就再占用更多的字节。例如创建这样的表:







  create TABLE vtt 
  ( 
  c1 BIT NOT NULL, 
  c2 VARchar(5) NOT NULL, 
  c3 BIT NOT NULL, 
  c4 NVARchar(5) NULL, 
  c5 BIT NULL, 
  c6 INT NOT NULL 
  ) 


  这里将变长列筛选出来后就变成了c1、c3、c5、c6,有3个BIT类型列是连续的,所以c1、c3、c5将公用一个字节。接下来就来验证一下:


  (1)插入一条示例数据:







insert INTO vtt VALUES(1,’abc’,1,N’xyz’,0,1023) 

  (2)用前面用的SQL语句,同样的方法,找出vtt表的第一页为:0xC00000000100,对应的就是文件号1,页号192


  (3)查看该页的内部数据:







  00000000: 30000900 03ff0300 00060000 02001500 0. …………. 
  00000010: 1b006162 63780079 007a00..abcx.y.z. 


  插入的数据从第5个字节开始03ff…… 这儿03就是c1、c3、c5的数据,03转换成二进制就是00000011。c1列对应最低位1,c3对应倒数第二位1,c5对应倒数第三位0。接下来的ff就是c6的值1023。后面的就是列数、NULL位图、变长列等,这里是讨论BIT位占用空间的,所以就不讲解后面这些了。


  3.一个表中有多个BIT类型的列其顺序是否连续决定了BIT位是否可以共享一个字节。SQL Server中按照列顺序存储,第一列和最后一列都是BIT数据类型列,不可以共用一个字节。


  也就是说下面的表t1和表t2占用的空间是不同的,t1数据占用了7字节,t2数据占用了8字节。 







 create TABLE t1 
  ( 
  c1 INT PRIMARY KEY, 
  c2 BIT NOT NULL, 
  c3 BIT NOT NULL, 
  c4 char(2) NOT NULL 
  ) 
  create TABLE t2 
  ( 
  c1 INT PRIMARY KEY, 
  c2 BIT NOT NULL, 
  c4 char(2) NOT NULL, 
  c3 BIT NOT NULL 
  ) 



  但是在下面的t3和t4表中,由于中间是变长数据类型,所以他们的BIT列占用的数据空间是相同的。  







create TABLE t3  
  (  
  c1 INT NOT NULL,  
  c2 BIT NOT NULL,  
  c3 VARchar(2) NOT NULL,  
  c4 BIT NOT NULL  
  ) 
  create TABLE t4 
  ( 
  c1 INT NOT NULL, 
  c2 BIT NOT NULL, 
  c4 BIT NOT NULL, 
  c3 VARchar(2) NOT NULL 
  ) 

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

深蓝
深蓝

相关推荐