SQL Server可空数据类型大小
Microsoft SQL Server DBMS中可空数据类型的大小是多少? 例如,不可为null的int应该占用4个字节,有多少空间将专用于可为null的列 子问题:可空int、char(N)、nvarchar(N)-我假设它们的存储方式可能不同 我读到的:SQL Server可空数据类型大小,sql,sql-server,Sql,Sql Server,Microsoft SQL Server DBMS中可空数据类型的大小是多少? 例如,不可为null的int应该占用4个字节,有多少空间将专用于可为null的列 子问题:可空int、char(N)、nvarchar(N)-我假设它们的存储方式可能不同 我读到的: -获取我的sql server版本的sql类型列表及其大小的好方法。但对于可为空的类型却只字不提 -有一个计算所需可变大小列空间的公式:“变量数据大小=2+(Num\u变量大小x 2)+最大值变量大小”。这很奇怪:为什么它包含*2乘法
- -获取我的sql server版本的sql类型列表及其大小的好方法。但对于可为空的类型却只字不提
- -有一个计算所需可变大小列空间的公式:“变量数据大小=2+(Num\u变量大小x 2)+最大值变量大小”。这很奇怪:为什么它包含*2乘法器(没有关于nvarchar的说明-这个公式适用于所有变量大小的类型,正如解释中所述);它必须是一个打字错误,最大值的大小是增加,而不是乘以;最后,它包含+2字节用于存储值的长度,但同样不包含任何用于存储空值的内容。据我所知,可以使用值长度为2字节的剩余3位来存储空标识符,但它真的是这样存储的吗
- -对我来说,最重要的答案令人困惑@Mark Byers说,“如果字段是固定宽度的,则存储NULL占用的空间与任何其他值相同,即字段的宽度”,但不可能将标准整数值间隔和附加NULL值存储在相同的位计数中。然后,“如果字段是可变宽度的,则空值不占用空间”-存储空值也不能占用任何空间-它必须为空值存储一些标记。与其他答案类似的困惑是:有人说它需要额外的2个字节,有人说只需要1个字节
- -具有类型大小的漂亮表格,但同样没有专门用于空值的内容
--常规空值需要空位图中的1位
参考:可空列和不可空列在数据页上占用完全相同的存储空间。每个数据页的一部分是空位映射,表中的每一列都有一个位,即使是不可空的列 数据页的空位映射部分只存储可空列的位,这是一种常见的误解。事实并非如此。空位图部分包含表中所有列的可空标志。这是一个很好的解释这个神话的参考。这是另一个 我想知道为什么SQLServer(以前是Sybase)使用这种结构。一种可能性是更改列的可空性可能是一种“Fastsh”操作。虽然所有页面上的位都发生了很大的变化,但引入新的可空字段不会导致页面拆分
另一种可能性是,它稍微将页面上的布局与表元数据分离。虽然该页面不知道列名,但它知道基于列索引的列的所有信息。很好的链接,谢谢。这是我第一次听说稀疏列=)。我不确定您是否可以确认,但它真的是额外的1位,还是占用了整个字节?因为SQL Server中的位数据类型实际上使用1字节。BTW,对于稀疏列,考虑由数据类型节省的部分估计空间。@ OutkStand RPixYynyy-SQLServer将空标志位打包成字节,因此最多8个可空列仅产生1字节开销。