I was trying to identify the missing indexes in my SQL Server 2012
database and I used the Display Estimated Execution Plan in the SQL
Server Management Studio. Even after I created the suggested index,
succeeding attempts to display the execution plan still showed the index
that I just created as missing.
SQL Server keeps data about possible missing indexes and the script below helped me to show all the missing indexes that SQL Server was tracking as well as the actual scripts to create these missing indexes. I got it from this link:
http://blog.sqlauthority.com/2011/01/03/sql-server-2008-missing-index-script-download/
In my case, I saw multiple suggestions for missing indexes for the same
table I was having trouble on. When I created all the suggested indexes,
the problem with the Display Estimated Execution Plan query did not
appear anymore and the performance of the query was great.
SQL Server keeps data about possible missing indexes and the script below helped me to show all the missing indexes that SQL Server was tracking as well as the actual scripts to create these missing indexes. I got it from this link:
http://blog.sqlauthority.com/2011/01/03/sql-server-2008-missing-index-script-download/
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
No comments:
Post a Comment