同一列上的可互换NONCLUSTERED和UNIQUE索引

时间:2013-03-25 22:23:59

标签: sql-server indexing

我在桌面上有这两个索引,我想知道它们是否可以互换? 问题在于,当我查看使用情况统计信息时,我发现两者都在使用。

如果删除IX_clicks_token会怎样?会改为使用uc_token吗?

CREATE NONCLUSTERED INDEX [IX_clicks_token] ON [dbo].[clicks]
(
    [token] ASC
)


ALTER TABLE [dbo].[clicks] ADD  CONSTRAINT [uc_token] UNIQUE NONCLUSTERED 
(
    [token] ASC
)


OBJECT NAME     |   IX_clicks_token --- uc_token
user_seeks      |   0 --- 12
user_scans      |   10500 --- 298
user_lookups    |   0 --- 0
user_updates    |   582272 --- 582272
last_user_seek  |   NULL --- 2013-03-24
last_user_scan  |   2013-03-25 --- 2013-03-20

2 个答案:

答案 0 :(得分:3)

IX_clicks_tokenuc_token具有几乎相同的定义,唯一不同的是uc_token强制执行唯一性以及提供非聚集索引。

如果删除IX_clicks_token,则应该使用uc_token,假设没有一些奇怪的边缘情况,其余的索引是超级碎片。

答案 1 :(得分:1)

两者都是等价的。可能由于随机优化器的选择,在相同的替代方案中,它们都被使用了。

删除其中一个。真的不重要,哪个。情况可能是你不能放弃另一个但放弃另一个 - 在这种情况下你可以选择。