【发布时间】:2014-01-22 04:03:25
【问题描述】:
在使用Brent Ozar 的sp_BlitzIndex 脚本调查我的数据库时。我发现一些重复的索引问题 Multiple Index Personalities: Duplicate keys.
重复索引问题针对以下索引。
CREATE INDEX [IX_Business] ON [dbo].[tblMobile] ( [BusinessID] );
CREATE INDEX [IX_Comb_Marketing] ON [dbo].[tblMobile] ( [BusinessID] ) INCLUDE ( [MobileNo]);
这两个索引的区别是
INCLUDE ( [MobileNo]);
现在,我对如何解决重复索引问题感到困惑。我不能删除没有包含列的第一个索引,我可以删除包含列的索引吗?我是否需要在第一个索引中包含列 MobileNo 并且可以删除第二个?
如果我删除第二个并且不包含第一个索引中的列会有什么影响?
请帮助我。谢谢。
【问题讨论】:
-
为什么不能删除第一个索引?使用它的查询仍然可以使用第二个索引。
-
如果第一个索引是带有主键的簇索引怎么办?
-
嗯,这不符合您问题中的
CREATE INDEX陈述。 -
如果您删除第二个索引(包含列),那么如果您有一个使用
BusinessID查找行然后返回该ID 和MobileNo的查询,现在,这个查询可以从索引中得到满足。如果您删除该索引,那么为了获得MobileNo列,SQL Server 将不得不对基表进行昂贵的 键查找 并获得该列。因此,执行该特定查询将花费更长的时间 -
那么聚集索引隐含地包括表中的所有列,所以第二个。尽管根据使用它的查询,如果 NCI 的叶级别要窄得多,则可能会同时保留两者。
标签: sql sql-server sql-server-2008 sql-server-2008-r2 indexing