Qual è il rischio in cui si può incorrere quando un progetto viene sviluppato da più persone, ovvero quando un database viene modellato da più mani?
Creare un indice che esiste già! :-(
SQL Server non fa nulla per venirci in aiuto o, almeno, non fa nulla in automatico.
Con questo script è possibile ottenere una lista degli indici identici / duplicati.
;WITH tIndex AS (
SELECT object_id AS id , index_id AS indid , type, name , ( SELECT colid as colPosition FROM sys.sysindexkeys WHERE id = I.object_id AND indid = I.index_id AND keyno > 0 FOR XML PATH ) AS cols , ( SELECT includedCol FROM ( SELECT CASE keyno WHEN 0 THEN colid ELSE NULL END AS includedCol FROM sys.sysindexkeys WHERE id = I.object_id AND indid = I.index_id ) T0 order by includedCol FOR XML PATH ) AS inc
FROM sys.indexes AS I )
SELECT object_schema_name ( T1.id ) + ‘.’ + object_name ( T1.id ) as tableName, T1.name AS indexName, T2.name AS duplicateIndex, S.used_page_count * 8 indexSizeKB
FROM tIndex AS T1
JOIN tIndex AS T2 ON T1.type = T2.type AND T1.id = T2.id AND T1.indid < T2.indid AND T1.cols = T2.cols AND T1.inc = T2.inc
JOIN sys.dm_db_partition_stats AS S ON S.[object_id] = T2.id AND S.index_id = T2.indId
ORDER BY object_schema_name ( T1.id ) + ‘.’ + object_name ( T1.id ), T1.name
go