【问题标题】:Inserting negative key values on a clustered index在聚集索引上插入负键值
【发布时间】:2018-08-10 04:30:35
【问题描述】:
我有一个仓库事实表,它在 BIGINT 列上有一个聚集索引。由于我无法控制的情况,我必须将来自另一个源的数据添加到事实表中,其中来自两个不同源系统的键重叠(我希望来自第二个源的数据在它自己的数据集市中,但我被否决了)。为了处理这个问题,我将 1000000 添加到密钥并将其乘以 -1。
如果我将所有这些负键插入到聚集索引中,是否会在重组或重建索引时增加更多开销,而不是不断添加越来越大的大于 0 的键。
谢谢
【问题讨论】:
标签:
sql-server
indexing
database-administration
clustered-index
【解决方案1】:
嗯,是的,确实如此。想想写在几张纸上的列表,这些纸是排序的。在最后添加一个条目没有问题:如果最后一页有足够的空间,则可以在该页上写条目,如果最后一页已满,则可以在末尾添加一个空白页并写该页面上的条目。但是,如果您必须在列表的开头添加一个新条目怎么办?第一页上的所有条目都必须向下移动,以便为新条目腾出空间,如果页面已满,则必须添加一个新页面……在 SQL Server 中,这个新页面不会位于其他页面的前面,因此页面列表会变得碎片化,这会影响查询性能。
如果您不需要按该键在磁盘上对记录进行物理排序,请考虑将索引更改为非聚集索引。
【解决方案2】:
如果您在聚集索引中添加更多值(正值或负值),数据量会增长 - 所以是的,随着时间的推移,开销会增加一些。
但这并不取决于它们是正值还是负值......索引并不关心这一点 - 它只是一堆 BIGINT 值。