Monday, June 10, 2013

MS Support Script for Creating Missed Indexes in all Tables

PRINT 'Missing Indexes: ' 

PRINT 
'The "improvement_measure" column is an indicator of the (estimated) improvement that might '

PRINT 
'be seen if the index was created. This is a unitless number, and has meaning only relative '

PRINT 
'the same number for other indexes. The measure is a combination of the avg_total_user_cost, '

PRINT 
'avg_user_impact, user_seeks, and user_scans columns in sys.dm_db_missing_index_group_stats.'

PRINT '' 

PRINT '-- Missing Indexes --' 

SELECT CONVERT (VARCHAR, Getdate(), 126)                              AS runtime 
       , 
       mig.index_group_handle, 
       mid.index_handle, 
       CONVERT (DECIMAL (28, 1), migs.avg_total_user_cost * migs.avg_user_impact 
                                 * ( 
                                 migs.user_seeks + migs.user_scans )) AS 
       improvement_measure, 
       'CREATE INDEX missing_index_' 
       + CONVERT (VARCHAR, mig.index_group_handle) 
       + '_' + CONVERT (VARCHAR, mid.index_handle) 
       + ' ON ' + mid.statement + ' (' 
       + Isnull (mid.equality_columns, '') + CASE WHEN mid.equality_columns IS 
       NOT NULL 
       AND mid.inequality_columns IS NOT NULL THEN ',' ELSE '' END 
       + Isnull (mid.inequality_columns, '') + ')' 
       + Isnull (' INCLUDE (' + mid.included_columns + ')', '')       AS 
       create_index_statement, 
       migs.*, 
       mid.database_id, 
       mid.[object_id] 
FROM   sys.dm_db_missing_index_groups mig 
       INNER JOIN sys.dm_db_missing_index_group_stats migs 
               ON migs.group_handle = mig.index_group_handle 
       INNER JOIN sys.dm_db_missing_index_details mid 
               ON mig.index_handle = mid.index_handle 
WHERE  CONVERT (DECIMAL (28, 1), migs.avg_total_user_cost * migs.avg_user_impact 
                                 * ( 
                                        migs.user_seeks + migs.user_scans )) > 
       10 
ORDER  BY migs.avg_total_user_cost * migs.avg_user_impact * ( 
                    migs.user_seeks + migs.user_scans ) DESC 

PRINT '' 

go 

No comments:

Post a Comment