我有一些表(表A和表B),带有IDENTITY规范的BIGINT作为主键。 在那些表中,我有2个VARBINARY(MAX)列。更新和删除非常罕见。
它们具有几乎相同的行数,表B略少但在VARBINARY(MAX)列中有更多的数据。
我很惊讶地看到表B中PK使用的存储量远远高于表A中PK使用的存储量。 做一些阅读,纠正我,如果我错了,在主题澄清,这是有一些事情与最大行大约8k。因此,有一些分页正在进行,其中包含一个字节引用,然后将其包含在索引中。因此,表B中PK使用的存储量较大。它占DB总大小的30%左右。 我假设只有BIGINT才是索引的一部分。
我的问题是,是否有解决方法?任何可以防止这种情况的设计,技术或黑客?
此致
埃斯
答案 0 :(得分:0)
PK是CLUSTERED索引:数据与密钥一起存储。每个表只能有一个聚簇索引,因为数据只能存储在一个地方。因此,任何聚簇索引(例如PK)将占用比非聚簇索引更多的空间。
如果B中有更多varbinary表,那么我希望PK占用更多空间。
但是,由于这个varbinary是(MAX),所以最初的想法是只有数据指针应该与密钥一起存储。但是,如果行足够小(即<8000字节),我想SQL Server通过使用密钥保持数据来优化存储/检索,从而增加索引的大小。我不知道会发生这种情况,但却无法找到任何说它不会发生的事情。因为优化似乎是合理的。
把它当作物有所值!