【发布时间】:2015-08-07 21:29:29
【问题描述】:
要迁移到新架构,我对表做了两件事:
- 将 VARCHAR 列更改为 NVARCHAR
- 添加 BIGINT 列
为了测试这对大小的影响,我生成了 180,000 行。我要更改的 VARCHAR 列在每一行都设置为 null。
以下是 sp_spaceused 的结果(所有大小以 KB 为单位):
rows reserved data index_size unused
---- -------- ---- ---------- ------
before 180000 110976 43168 67288 520
after 180000 120320 52536 67296 488
因此数据增长了 9MB 以上。我原本预计它只会增长 1.4 MB,因为我添加了一个 8 字节的数字列。
如果我只是创建表并生成数据,大小看起来更像我的预期:
rows reserved data index_size unused
---- -------- ---- ---------- ------
180000 117760 46184 71352 224
那么添加一个列是否会导致 sp_spaceused 报告比实际添加的数据更多的正在使用的数据?
【问题讨论】:
-
表定义是什么?你是如何生成这些行的?
-
您之后是否重建了聚集索引?通过在每行上需要额外的八个字节,您可能会得到各种页面拆分。检查使用的页数,我敢打赌它增加了不少。
-
不会将
VARCHAR更改为NVARCHAR使字符串长度加倍吗?这也可能导致一些转发记录。 -
@mustaccio 他们说所有的值都是空的,所以这将是零长度。转发的记录仅适用于堆。
标签: sql-server