在SQL Server中将char(8)更改为char(32)

时间:2012-06-12 11:59:08

标签: sql-server database

我们有一个表T,其中包含多个char(8)列(隐式),在某些情况下需要将其更改为char(64)

我们不想浪费空间,所以问题如下: 从RDBMS计算的角度来看,这是一项昂贵的操作(扩展列数据类型)吗?我们希望从理论上解决这个问题,没有基准。数据库是否需要重新排列表的物理布局?

2 个答案:

答案 0 :(得分:4)

是的,相当昂贵 - 必须触摸,修改,再次存储该表中的每一行,并且需要重建使用任何这些列的所有非聚集索引。

由于它是CHAR(x),因此它是固定宽度的 - 因此更改其大小会导致每个列都必须进行修改。另外:当从8到64个字符的变化时,某些页面可能无法再保存所有行,并且会发生页面拆分以及所有开销。

答案 1 :(得分:2)

如果增加char数据类型的长度,则需要进行数据页拆分,并且在CPU利用率,内存优化和数据压缩方面成本很高。