2017-10-15 39 views

回答

3

假设你保持列相同的“类型”,所以你的意思是:

alter table alter column col varchar(max); -- for some varchar 
alter table alter column col bigint;  -- where the column is a smaller int 

(这比OP的问题更普遍;我在标题中发现的问题具体是指字符数据)

然后就不太可能有“未来”的问题。任何现有的数据都应该适合“更大”的数据类型。

当您进行更改时,SQL Server可能需要重新构建数据库页面,因此可能需要一些时间。但是,这是一个短期的考虑,而不是一个长期的考虑。那么,有点短期。重组可能会导致碎片化 - 但这种情况在varchar()更改时不太可能发生。

如果任何列用于外键引用,您可能会发现无法进行更改 - 除非您删除外键约束并重建它。

显然,数据可能会占用更多的空间在磁盘上和存储器(尽管这是用于varchar()nvarchar()次要的考虑,因为这些都是可变长度)。

额外的空间可以稍微增加查询的运行时间。存在边界最坏的情况,其中增加的空间意味着表格的数据页面不适合内存,并且您可能会遇到某些查询的颠簸情况。然而,这是不太可能的,并且无论如何会发生更多的行或页数较少的填充。

这也会影响使用这些列的索引。

相关问题