BIT类型在SQL Server中的存储大小
http://tech.ddvip.com 2008年08月26日 社区交流
内容摘要:对于一般的INT、CHAR、tinyint等数据类型,他们占用的存储空间都是以Byte字节为单位的,在SQL Server中BIT类型到底占用了多少空间?是不是由一个Bit位来存储的?或者可能是使用一个字节来存储的?
对于一般的INT、CHAR、tinyint等数据类型,他们占用的存储空间都是以Byte字节为单位的,但是BIT类型由于只有0和1或者说false和true,这种情况只需要一个Bit位就可以表示了,那么在SQL Server中BIT类型到底占用了多少空间?是不是由一个Bit位来存储的?或者可能是使用一个字节来存储的?
这两个答案都不正确!实际上BIT类型占用的空间与BIT类型的列所在表的位置有关,有些情况下BIT占用了一个字节,有些情况下BIT实际占用了几个位(几个BIT类型的列共用一个字节)。下面就来具体分析一下:
1. 单独的BIT类型的列将占用一个字节。
所谓单独就是指一个BIT类型的列的左边定长列和右边定长列都不是BIT类型的列。例如这样一个表:
CREATETABLEtt
(
c1INTPRIMARYKEY,
c2BITNOTNULL,
c3CHAR(2)NOTNULL
)
SQL Server在存储表中的数据时先是将表中的列按照原有顺序分为定长和变长(变长就是长度不固定的数据类型,如varchar,nvarchar,varbinary等)两组。在数据页中存储数据时先存储所有定长的数据,然后再存储变长的数据。这里由于c2列的左边是int类型,右边是char类型,都是定长的,而且不是BIT类型,所以c1和c3之间必须留出一个字节来存储c2,虽然c2只用到了其中的一个位。
下面我们来验证一下是否真是如我所说:
(1)插入一行数据:
INSERTINTOttVALUES(1,1,'aa')
(2)找到tt表数据的第一页(也就是刚才插入的这行数据所在页)的文件号和页面号:
SELECTfirst_page
FROMsys.partitionsp
INNERJOINsys.system_internals_allocation_unitsa
ONp.partition_id=a.container_id
WHEREOBJECT_ID=OBJECT_ID('dbo.tt')
作者:深蓝 责编:豆豆技术应用
- SQL Server 2008 教程
- SQL Server 2005 教程
- SQL Server 安全设置
- SQL Server 故障解决
- SQL Server 安装配置
- SQL Server 备份恢复
- SQL Server 性能调优
- SQL Server 存储过程
- SQL Server 函数
- SQL Server 事务
- SQL Server 查询
- SQL Server 索引
- SQL Server 入门教程
- SQL Server 数据类型
- SQL Server 数据库表
- SQL Server T-SQL
- SQL Server 语句
- SQL Server 死锁
- SQL Server 加密
- SQL Server 数据库连接
- SQL Server 数据仓库
- SQL Server 数据库管理
- 更多SQL Server 专题>>>