Wednesday, 30 January 2019

SQL Server Mising Index

The SQL script is used to identify the missing index in SQL Server
       SELECT dm_mid.database_id                                         AS DatabaseID, 
       dm_migs.avg_user_impact * ( dm_migs.user_seeks + dm_migs.user_scans ) 
       Avg_Estimated_Impact, 
       dm_migs.last_user_seek                                     AS 
       Last_User_Seek, 
       Object_name(dm_mid.object_id, dm_mid.database_id)          AS [TableName] 
       , 
       'CREATE INDEX [IX_' 
       + Object_name(dm_mid.object_id, dm_mid.database_id) 
       + '_' 
       + Replace(Replace(Replace(Isnull(dm_mid.equality_columns, ''), ', ', '_') 
       , '[', 
       ''), ']', '') 
       + CASE WHEN dm_mid.equality_columns IS NOT NULL AND 
       dm_mid.inequality_columns IS 
       NOT NULL THEN '_' ELSE '' END 
       + Replace(Replace(Replace(Isnull(dm_mid.inequality_columns, ''), ', ', 
       '_'), '[' 
       , ''), ']', '') 
       + ']' + ' ON ' + dm_mid.statement + ' (' 
       + Isnull(dm_mid.equality_columns, '') + CASE WHEN dm_mid.equality_columns 
       IS NOT 
       NULL AND dm_mid.inequality_columns IS NOT NULL THEN ',' ELSE '' END 
       + Isnull(dm_mid.inequality_columns, '') + ')' 
       + Isnull(' INCLUDE (' + dm_mid.included_columns + ')', '') AS 
       Create_Statement 
FROM   sys.dm_db_missing_index_groups dm_mig 
       INNER JOIN sys.dm_db_missing_index_group_stats dm_migs 
               ON dm_migs.group_handle = dm_mig.index_group_handle 
       INNER JOIN sys.dm_db_missing_index_details dm_mid 
               ON dm_mig.index_handle = dm_mid.index_handle 
WHERE  dm_mid.database_id = Db_id() 
ORDER  BY avg_estimated_impact DESC 

go