1

我有一些表(表 A 和表 B),其中 BIGINT 以 IDENTITY 规范作为主键。在这些表中,我有 2 个 VARBINARY(MAX) 列。更新和删除非常罕见。

它们的行数几乎相同,表 B 少一点,但 VARBINARY(MAX) 列中的数据要多得多。

我很惊讶地看到表 B 中的 PK 使用的存储空间比表 A 中的 PK 使用的存储空间高得多。做一些阅读,如果我错了,请纠正我,关于澄清的主题与最大行大小约为 8k。因此,存在一些使用字节引用进行的分页,然后将其包含在索引中。因此,表 B 中 PK 使用的存储空间更大。它大约是数据库总大小的 30%。我假设只有 BIGINT 是索引的一部分。

我的问题是是否有解决方法?有什么设计、技术或黑客可以防止这种情况发生吗?

问候

维尔玛

4

1 回答 1

0

PK 是 CLUSTERED 索引:数据与密钥一起存储。每个表只能有一个聚集索引,因为数据只能存储在一个地方。因此,任何聚集索引(例如 PK)都会比非聚集索引占用更多空间。

如果 B 中有更多 varbinary 表,那么我希望 PK 占用更多空间。

然而,由于这个 varbinary 是 (MAX),所以最初的想法是只有数据指针应该与密钥一起存储。但是,如果该行足够小(即 < 8000 字节),我想 SQL Server 通过将数据与键一起保存来优化存储/检索,从而增加索引的大小。我不知道会发生这种情况,但是找不到任何可以说没有的东西;作为优化似乎是合理的。

把它当作它的价值!

于 2015-08-13T17:40:02.373 回答