Home > Scripts > Verificare la presenza di indici identici / duplicati

Verificare la presenza di indici identici / duplicati

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

Chi è Davide Mauri

Microsoft Data Platform MVP dal 2007, Davide Mauri si occupa di Data Architecture e Big Data nel mondo dell'IoT. Attualmente ricopre il ruolo di "Director Software Development & Cloud Infrastructure" in Sensoria, societa specializzata nella creazione di Wearables e sensori per l'IoT applicati a tessuti ed oggetti sportivi.

Leggi Anche

Aggiornamento statistiche SQL per database che contengono External Table PolyBase

Recentemente, ho avuto l’occasione di configurare un piano di manutenzione database per un DB in …