为什么主键不是聚集索引而另一个索引是聚集的?

时间:2013-01-07 22:00:29

标签: sql-server primary-key non-clustered-index

我正在审查我们的SQL Server数据库上的索引,并注意到一个相对较小(非常旧)的表(3250行),其中包含一个varbinary(max)类型的列用于图像数据。

主键是非聚集索引,并且还有另一个索引(在用户ID上并被删除)。

同样,这是一张非常古老的桌子,在创建这张桌子时,没有人在这里。

那么,有没有理由让它以这种方式设置?我应该改变它吗?如果我应该,有什么我应该注意的吗?

1 个答案:

答案 0 :(得分:5)

索引是基于用例的。 PK实际上是PK的索引(您在索引中强制执行唯一性),并在查询中使用PK时使用。您可以轻松地想象查询中使用的列不依赖于PK并使用其他一些列组合的情况。

现在想象一下,这个用例并不是唯一的用例,而是主要用例。在这种情况下,设计人员可以聚集在这个用例上,而不是那些使用频率较低的用例。

我给你的建议是:

  1. 不要在不理解为什么事情以它们存在的方式进行更改,因为原始设计可能存在的原因非常充分 - 例如优化。
  2. 设计您的索引和群集时考虑到您的系统设计和操作特性,而不是盲目添加内容。你应该用坚定的证据来做到这一点,而不仅仅是空气中的手指'选项。
  3. 相信我,我通过被它咬了一口就学到了这一点。我试着不改变没有测试的东西,这些测试提供了变化的证据,既可以工作也可以不破坏其他东西。在使用遗留系统时,这是至关重要的事情。