我们有一个表T
,其中包含多个char(8)
列(隐式),在某些情况下需要将其更改为char(64)
。
我们不想浪费空间,所以问题如下: 从RDBMS计算的角度来看,这是一项昂贵的操作(扩展列数据类型)吗?我们希望从理论上解决这个问题,没有基准。数据库是否需要重新排列表的物理布局?
答案 0 :(得分:4)
是的,相当昂贵 - 必须触摸,修改,再次存储该表中的每一行,并且需要重建使用任何这些列的所有非聚集索引。
由于它是CHAR(x)
,因此它是固定宽度的 - 因此更改其大小会导致每个列都必须进行修改。另外:当从8到64个字符的变化时,某些页面可能无法再保存所有行,并且会发生页面拆分以及所有开销。
答案 1 :(得分:2)
如果增加char数据类型的长度,则需要进行数据页拆分,并且在CPU利用率,内存优化和数据压缩方面成本很高。