Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 包含和不包含列的重复索引_Sql_Sql Server_Sql Server 2008_Sql Server 2008 R2_Indexing - Fatal编程技术网

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的叶级别根据使用它的查询而窄得多,则可能需要保留这两个选项。