Sql 如果数据类型从smallint更改为bigInt,表的存储大小是否会扩展四倍?
如果我将一个包含N行的表的列的数据类型从“smallint”更改为“bigint”,这会自动导致物理存储扩展四次吗 或者实现使其依赖于存储在中的值Sql 如果数据类型从smallint更改为bigInt,表的存储大小是否会扩展四倍?,sql,sql-server-2008,types,Sql,Sql Server 2008,Types,如果我将一个包含N行的表的列的数据类型从“smallint”更改为“bigint”,这会自动导致物理存储扩展四次吗 或者实现使其依赖于存储在中的值 谢谢 是的,该列的物理存储空间必须增加。所有整数数字数据类型都是固定宽度的列-每行中每列的存储大小固定。因此,如果从一种数据类型切换到另一种数据类型,则必须重新安排物理存储 这与可变宽度字符串数据类型--nvarchar(x)和varchar(x)形成对比,其中每行使用的存储量不同。通过更改这些数据类型的最大长度来更改这些数据类型不会导致任何物理存储
谢谢 是的,该列的物理存储空间必须增加。所有整数数字数据类型都是固定宽度的列-每行中每列的存储大小固定。因此,如果从一种数据类型切换到另一种数据类型,则必须重新安排物理存储 这与可变宽度字符串数据类型--
nvarchar(x)
和varchar(x)
形成对比,其中每行使用的存储量不同。通过更改这些数据类型的最大长度来更改这些数据类型不会导致任何物理存储更改-如果x
被加长,这只是一个元数据操作(根据定义,您可以存储更长的字符串,所有现有数据都已小于此新的最大长度),或者如果x
被缩短,必须扫描所有行以确认它们符合新的最大值,但如果发现任何不符合的行,则操作将因错误而中止,而不是执行截断
因此,列的大小会改变四倍。对整体行和表大小的影响取决于表包含的其他列的数量