可能是重复的问题:
SQL Server索引的创建思路以及缺失索引的查询
查找多余索引的T-SQL语句
我正在使用 SQL Server 2008,并且拥有一个包含超过150个表的数据库,其中有一些是重复的索引。
我找到了一些 SQL 脚本可以列出这些重复的索引,但我不确定是否应该相信它们。据说,它们会告诉我有400多个重复的索引;我不确定这是否正确,因此不想使用它们来自动删除冗余索引。
那么我如何确认重复的索引并将其删除呢?
可能是重复的问题:
SQL Server索引的创建思路以及缺失索引的查询
查找多余索引的T-SQL语句
我正在使用 SQL Server 2008,并且拥有一个包含超过150个表的数据库,其中有一些是重复的索引。
我找到了一些 SQL 脚本可以列出这些重复的索引,但我不确定是否应该相信它们。据说,它们会告诉我有400多个重复的索引;我不确定这是否正确,因此不想使用它们来自动删除冗余索引。
那么我如何确认重复的索引并将其删除呢?
select name from sys.tables
declare @TableName as varchar(50)
set @TableName = 'EmployeeMaster'
--- 1.
select name as IndexName,Index_id as IndexID from sys.indexes
where index_id NOT in (
select MIN(index_id) from (
select avg(column_id) avgCol,index_id from sys.index_columns where
object_id = object_id(@TableName)
group by index_id
) as a group by avgCol
) and object_id = object_id(@TableName)
--- 2.
select '
IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'''+@TableName+''')
AND name = N'''+name+''')
DROP INDEX ['+name+'] ON '+@TableName+' WITH ( ONLINE = OFF )
' from sys.indexes
where index_id NOT in (
select MIN(index_id) from (
select avg(column_id) avgCol,index_id from sys.index_columns where
object_id = object_id(@TableName)
group by index_id
) as a group by avgCol
) and object_id = object_id(@TableName)