BIT类型在SQLServer中的存储大小

广告也精彩

对于平均int,char,tinyint,它们占用的存储空间是字节字节字节字节,但位类型仅为0和1或false,只需要一位。 它可以表达,然后在SQL Server中以位类型中占用多少个空格? 它有点吗? 或者也许它使用字节存储?这两个答案是不正确的! 实际上,位类型占据的空间与位类型列表的位置有关。 在某些情况下,某些情况占用一个字节,在某些情况下,该位实际上需要几个比特(几个位类型列共享一个字节)。 以下是特定分析:1.单独的位类型的列将占用一个字节。所谓的单独的是指规范列的一列,右像素列的列不是位类型。 例如,这样的表:createtablett。(c1intprimarykey,c2bitnotnull,C3Char(2)NotNull)SQLServer在存储表中,表中的数据是将表中的列划分为固定长度,变长(只要数据类型的长度,例如varchar,nvarchar,varbinary等)。 将所有多个数据存储在数据页中,然后存储越来越多的数据。 由于C2列的左侧是一个int类型,因此右侧是一个char类型,它是固定的,所以它不是一个位类型,因此您必须在c1和c3之间存储字节来存储c2,但仅限C2 用过一个。 少量的。让我们验证它真的像我:(1)插入数据电缆:IssertOttTtvalues(1,1,’AA’)(2)找到TT表数据的第一页(即您只需插入的此数据行的文件编号和页码):selectFirst_page。形式.Partitions。innerjointsys.system_internals_allocation_unitsa。onp.partition_id = a.container_id。whereobject_id = object_id(’dbo.tt’)我在这里是0x760000000100,你需要反转它,请参见0x000100000076。 前两个字节是文件编号,背部是页码,因此文件编号为1,页码为118(0x76转换为小数点118)(3)使用dbccpage命令查看页面的内部结构:DBCC Traceon(3604)DBCCPage(Testdb,1,118,3)DBCCCTRACEON(3604)表示页面内容的内容直接输出,并且TestDB是我创建了TT表的数据库,我已经表示1和118.最后一个是打印选项。  0仅表示输出页面;  1不输出所有内容,只输出数据的内容;  2表示完整输出,3和1是相似的,但列出了每个记录。 以下是您需要注意输出:00000000:10000不是0001000000016161030000 ……… ……我不会在此处讲述数据电缆的特定格式,并在“SQLServer 2005技术内部存储引擎”中介绍。 我们从第5个字节,0100000001611插入了数据。这个01000000是C1,因为它是一个int类型,所以它占用了4个字节。 接下来01是C2,需要一个字节。 然后,6161是C3。2.使用“可变长度数据类型”列使用列,然后删除长列,然后查看连续位类型的数量,每列占用一位,如果超出8列将再次占用更多字节。 例如,创建这样的表:createTablevtt。(c1bitnotnull,c2varchar(5)notnull,c3bitnotnull,C4nvarchar(5)null,c5bitnull,c6intnotnull。)这里,它将成为C1,C3,C5,C6和3位类型列是连续的,因此C1,C3和C5将使用公共一个字节。 这是验证的下一步:(1)插入示例数据:InsertIntovttvalues(1,’abc’,1,n’xyz’,0,1023)(2)使用前面使用的SQL语句,相同的方法,找到VTT表的第一页AS:0xC00000000100,相应的是文件编号1,页码192(3)在此页面上查看内部数据:000000008:3000000000003FF03001500002001500?  0 …………00000010:1B00616263780079007a00?  abcx.y.z.插入的数据从第五字节03FF开始…该03是转换为二进制C1,C3,C5,03,00000011的数据。C1列对应于最低位置1,C3对应于第二位1和C5对应 到第三位0.下一个FF是C6 1023的值。以下是列数,空缺数量,在这里讨论空间,所以他们没有解释这些。3.表中表中的列,是否连续确定订单是否可以共享一个字节。  SQL Server以列序列存储,第一个列和最后一列是位数据类型列,一个字节无法共享。也就是说,表T1和T2以下的空间是不同的。  T1数据占用7个字节,T2数据占用8个字节。陷阱(c1intprimarykey,c2bitnotnull,c3bitnotnull,C4Char(2)NotNull)陷阱(c1intprimarykey,c2bitnotnull,C4Char(2)Notnull,c3bitnotnull。)但是,在下面的T3和T4表中,由于数据类型的增加,它们的位列占据了数据空间是相同的。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)

BIT类型在SQLServer中的存储大小

 

转载于天翼云知识,如有侵权,请联系删除,谢谢

© 版权声明
广告也精彩

相关文章

广告也精彩

暂无评论

暂无评论...