Sql 包含和不包含列的重复索引
在用脚本调查我的数据库时。我发现一些重复索引问题多索引个性:重复键 重复索引问题适用于以下索引Sql 包含和不包含列的重复索引,sql,sql-server,sql-server-2008,sql-server-2008-r2,indexing,Sql,Sql Server,Sql Server 2008,Sql Server 2008 R2,Indexing,在用脚本调查我的数据库时。我发现一些重复索引问题多索引个性:重复键 重复索引问题适用于以下索引 CREATE INDEX [IX_Business] ON [dbo].[tblMobile] ( [BusinessID] ); CREATE INDEX [IX_Comb_Marketing] ON [dbo].[tblMobile] ( [BusinessID] ) INCLUDE ( [MobileNo]); 这两个指数之间的区别是 INCLUDE ( [MobileNo]); 现在,我对
CREATE INDEX [IX_Business] ON [dbo].[tblMobile] ( [BusinessID] );
CREATE INDEX [IX_Comb_Marketing] ON [dbo].[tblMobile] ( [BusinessID] ) INCLUDE ( [MobileNo]);
这两个指数之间的区别是
INCLUDE ( [MobileNo]);
现在,我对如何处理重复索引问题感到困惑。我不能删除没有包含列的第一个索引,我可以删除包含列的索引吗?我是否需要在第一个索引中包含列MobileNo
,并且可以删除第二个
如果我删除了第二个索引,并且在第一个索引中不包含列,会有什么影响
请帮帮我。谢谢。我建议对这两个指数的de搜索进行评估。考虑从上次重新启动服务器开始的时间(统计信息将重置) 评价寻求
select 'TableName' = object_name(I.object_id)
, 'IndexName' = [I].[name]
, U.user_seeks
, U.user_scans
, U.user_updates
, U.last_user_seek
, U.last_user_scan
FROM sys.dm_db_index_usage_stats U
INNER JOIN SYS.INDEXES AS I ON I.[OBJECT_ID] = U.[OBJECT_ID]
AND I.INDEX_ID = U.INDEX_ID
为什么不能删除第一个索引?使用该索引的查询仍然可以使用第二个索引。如果第一个索引是带主键的群集索引呢?这与问题中的
CREATE index
语句不同。如果删除第二个索引(包括列),然后,如果您有一个使用BusinessID
查找行的查询,然后返回该ID加上MobileNo
,此时,可以从索引中满足此查询。如果删除该索引,那么为了获得MobileNo
列,SQL Server将不得不在基表中执行代价高昂的键查找并获取该列。因此,执行该特定查询将花费很长的时间,因为聚集索引隐式地包含表中的所有列,所以第二个是。不过,如果NCI的叶级别根据使用它的查询而窄得多,则可能需要保留这两个选项。