--
=============================================
--
Author:                   MalleswaraReddy
--
Create date: 26-09-2014
--
Description:            The below script
is used to identify the exact duplicate index on a table.
--
=============================================
;WITH CTE AS 
(
SELECT so.name as TableName,si.name AS IndexName,sc.name AS Name,ic.key_ordinal as KeyOrder ,
CASE si.is_unique   WHEN 1 THEN 'UNIQUE ' ELSE 'NON-UNIQUE ' END + si.type_desc AS type_desc
from sys.indexes si
join sys.tables so on si.object_id = so.object_id
join sys.index_columns ic on
si.index_id =
ic.index_id and
ic.object_id
= si.object_id
join sys.columns sc on  sc.column_id = ic.column_id and ic.object_id = sc.object_id
),
 CT AS
(
select  Row_number () Over( order by TableName,IndexName) AS Row,
                         T2.TableName ,
                         T2.IndexName,
                         T2.type_desc AS IndexType,
                                                                  STUFF((SELECT ','+T.name
                                                                                    FROm CTE T
                                                                                    WHERE (T.TableName = T2.TableName AND T.IndexName = T2.IndexName)
                                                                                    ORDER BY T.TableName,T.IndexName,T.KeyOrder
                                                                                    FOR XML PATH('')),1,1,'') AS IndexColumns
FROM
CTE T2 
GROUP BY TableName,IndexName,type_desc
)
Select Row,TableName,IndexName,IndexColumns,IndexType FROM CT
WHERE Row IN
(
  SELECT max(Row) FROM CT
  GROUP BY TableName,IndexColumns
  Having Count(*) > 1
)
UNION 
Select Row,TableName,IndexName,IndexColumns,IndexType FROM CT
WHERE Row IN
(
  SELECT MIN(Row) FROM CT
  GROUP BY TableName,IndexColumns
  Having Count(*) > 1
)
ORDER BY TableName,IndexColumns
No comments:
Post a Comment