我有一个名为Range
的表,其中包含一个数据类型为min_value
的列int
。我需要为该列保存长值。 ALTER TABLE
为现有数据分配更多空间。那效率很低。基本上我需要的是将来添加条目的更多空间。不适用于现有的。
答案 0 :(得分:1)
您最好只使用ALTER TABLE
并将列数据类型更改为BIGINT
。
如果您担心8个字节的值可能会消耗得更小,那么在Enterprise Edition上可以启用行压缩,因为这是解决的一个问题。
另一种方法是添加一个新的可空BIGINT列min_value2
。您可以使用检查约束来确保只有一列具有值,使用ISNULL(min_value2,min_value)确保非持久计算列。最初这将是非常便宜的,因为它只是元数据,但随着时间的推移,它将更加昂贵,因为新行和更新的行最终将占用两个列的空间。
另一种方法是使用BIGINT创建一个新表,然后继续使用它来处理需要它的行。你可以有一个视图,联合将它们组合在一起。但这会增加复杂性并可能降低查询执行计划的效率。