优化SQL中不断增加的密钥

时间:2019-06-26 11:33:27

标签: sql sql-server

问题本身很简单:

  • 我有大量的时间戳和值对
  • 除少数例外情况(<1%)外,时间戳都在不断增加并且独一无二
  • 我将时间戳记用作聚集索引

如何强制数据库系统尝试将值插入到末尾,并且如果它失败(在B树中不最右边(大边),可以在const时间检查),则只能执行二进制搜索正确的位置?

目标系统:MSSQL 2016或2017

1 个答案:

答案 0 :(得分:3)

您是否希望timestampt成为聚集索引,否则就不要。没有“中途”聚集索引。

因此,如果您希望将其群集,请在每页上保留额外的空间,以防以后插入新值。您可以使用fill_factor(记录在here中)进行控制。这样,聚簇索引可以(更多)有效地插入不在结尾处的值。

如果您不想在timestampt上使用聚集索引,请使用identity列来标识每一行。这将确保仅在表的“末尾”(即最后一页)插入行,从而使插入效率更高。您仍然可以在timestampt上使用常规索引来进行有效访问。

实际上,我更喜欢第二种方法。我会担心timestampt中的重复项,并且我更喜欢使用一个聚集索引来唯一标识每一行。