我有两个相同的表,它们包含相同的数据行。
一个为表的每一列使用 varchar(255),另一个为每一列正确键入(使用日期、整数、小数等)。
使用 Management Studio 的属性窗口,我可以看到将所有数据存储为 varchar 的表要小得多,这不是我期望看到的。我的理解是 int 只会使用 4 个字节的空间,因此比存储为 varchar 的 int 使用的空间少得多。
我应该寻找什么来了解这里发生的事情?两个表在 int 列上都有一个主键,没有其他索引。出于测试目的,它们已经填充了来自相同源查询的相同数据集。
所以这是因为我存储的数据的形状,在这种情况下,varchar 确实占用了更少的空间。
表中的许多列都是 int 和 numeric(38,12)(这非常大,因为数据源使用这种类型)。但是,这些列中的许多值都是 0 或整数。结果,varchar(255) 会将此值存储为 3 个字节(1 个字节,加上 2 个开销),而 int 将使用 4,而 numeric 将使用 17。这导致使用正确的类型以减少存储在整个表上有效。
为了减少使用的存储空间,我需要检查我是否可以更改类型(从 int 到 smallint 或 numeric(32,12) 到 numeric (19,8) 等)或者它看起来像稀疏列有很多 0 或 null 预期的好解决方案。