To get the key column list from indexes that are duplicates in SQL Server, you can use the following query:
use databasename go WITH DuplicateIndexes AS ( SELECT i.OBJECT_ID, i.index_id FROM sys.index_columns ic JOIN sys.indexes i ON i.OBJECT_ID = ic.OBJECT_ID AND i.index_id = ic.index_id WHERE i.type_desc <> 'HEAP' AND OBJECT_NAME(i.OBJECT_ID) NOT LIKE '%sys%' --excluding system tables GROUP BY i.OBJECT_ID, i.index_id HAVING COUNT(*) > 1 -- to check duplicates ) SELECT SCHEMA_NAME(o.schema_id) AS SchemaName, OBJECT_NAME(ic.OBJECT_ID) AS TableName, i.name AS IndexName, STRING_AGG(c.name, ', ') WITHIN GROUP (ORDER BY ic.key_ordinal) AS IndexedColumns FROM sys.index_columns ic JOIN sys.indexes i ON i.OBJECT_ID = ic.OBJECT_ID AND i.index_id = ic.index_id JOIN sys.objects o ON o.OBJECT_ID = ic.OBJECT_ID JOIN sys.columns c ON ic.OBJECT_ID = c.OBJECT_ID AND ic.column_id = c.column_id JOIN DuplicateIndexes di ON di.OBJECT_ID = ic.OBJECT_ID AND di.index_id = ic.index_id GROUP BY o.schema_id, ic.OBJECT_ID, i.name;
This query first identifies the indexes that are duplicates, and then retrieves the table name, index name, and the key column list for each duplicate index.
Execute this query in your SQL Server management tool to get the key column list from indexes that are duplicates in your database.
No comments:
Post a Comment