我工作的公司有几个 SQL Server 数据库,其中的表包含 +- 500.000.000 行。我们正在运行 SQL Server 2008R2 和 2014 的企业版。
大数据类型
当我查看最大表中使用的数据类型时,我看到了很多 BIGINT 列。使用 Thomas Larock 的脚本检查这些列中的数据并自己编写 MIN() 和 MAX() 值的脚本,我得出结论,这些 BIGINT 列中的数据可以轻松地适合 INT 甚至 SMALLINT/TINYINT 列。(我知道将来某些列可能需要 BIGINT 的范围,所以我不会在不先与开发人员交谈的情况下盲目更改所有数据类型)
在比较更改数据类型时可能节省的费用时,表的大小似乎是当前大小的一半(甚至不考虑索引和其他表)。这些数字没有任何数据压缩。
行压缩
在大表上启用了 ROW 压缩。我想知道“缩小”列数据类型的实际影响可能是什么,请记住 ROW 压缩仅使用需要的字节。例如,如果一个值可以存储在 1 个字节中,则存储将只占用 1 个字节。
真题
它是否有助于缩小数据类型,从而使 ROW 压缩使用更少的资源?还是说“因为启用了 ROW 压缩,所以 BIGINT、INT 或 SMALLINT 数据类型之间没有区别”?
由于您已经链接了状态的文档,因此 ROW 压缩仅使用所需的字节。一旦使用 ROW 压缩,用于从/到 int 或 bigint 转换的 CPU 周期是相同的:我不会担心这一点。
顺便说一句,如果您不确定 int/bigint 是否对数据库大小有影响(它没有),您可以通过快速而肮脏的重现来亲眼看看: