A non clustered primary-key与覆盖索引之间在性能方面的差异

时间:2017-07-26 13:17:40

标签: sql-server tsql primary-key covering-index

我有一个包含非聚集主键的表。我打算删除此主键,并在同一列上创建一个唯一的覆盖索引。

然后该表没有主键,但是有一个独特的覆盖索引。

我搜索谷歌但找不到相关主题。这根本错了吗?或者它可以完成。

更新

为什么我需要将此索引转换为覆盖索引?

因为这是主键,我有很多基于此键的选择查询。目前,对于每个选择,都需要RID查找,因为这是一个NONE聚簇键。如果我将它转换为覆盖索引,那么对于那些选择的查询,这个RID查找将会消失,并且希望会有更好的性能(至少是执行计划说的那样)。

当然,诚信也是有意的,这也是我将其作为独特覆盖指数的原因。主键是uniqueidentifier。

我想知道的是,这对其他任何事情都有负面影响。

执行计划之前:

enter image description here

执行计划之后:

enter image description here

1 个答案:

答案 0 :(得分:1)

这基本上是不寻常的,但可能会有一些罕见的情况,这很好。

你没有告诉我们任何关于想要这样做的原因,所以我们真的不能提供更多。

编辑:

根据Kimberly Tripp的this article,外键可以引用包含列的UNIQUE INDEX列来覆盖查询。

对我而言,这意味着用唯一覆盖索引替换主键可能很好。我能想到的唯一负面含义是,查看表的元数据以查找主键的任何应用程序或查询都找不到,并且可能不够智能而不能使用备用键。例如,如果您曾在此表上构建多维数据集,则“数据源视图”向导可能不会自动创建关系。