July, the 31 Days of SQL Server DMO’s – Day 25 (sys.dm_db_missing_index_details)

Posted by Tamarick Hill on SQL Blog See other posts from SQL Blog or by Tamarick Hill
Published on Thu, 25 Jul 2013 14:37:34 GMT Indexed on 2013/08/02 15:54 UTC
Read the original article Hit count: 459

Filed under:

The sys.dm_db_missing_index_details Dynamic Management View is used to return information about missing indexes on your SQL Server instances. These indexes are ones that the optimizer has identified as indexes it would like to use but did not have. You may also see these same indexes indicated in other tools such as query execution plans or the Database tuning advisor. Let’s execute this DMV so we can review the information it provides us. I do not have any missing index information for my AdventureWorks2012 database, but for the purposes of illustrating the result set of this DMV, I will present the results from my msdb database.

SELECT * FROM sys.dm_db_missing_index_details

image

The first column presented is the index_handle which uniquely identifies a particular missing index. The next two columns represent the database_id and the object_id for the particular table in question. Next is the ‘equality_columns’ column which gives you a list of columns (comma separated) that would be beneficial to the optimizer for equality operations. By equality operation I mean for any queries that would use a filter or join condition such as WHERE A = B. The next column, ‘inequality_columns’, gives you a comma separated list of columns that would be beneficial to the optimizer for inequality operations. An inequality operation is anything other than A = B. For example, “WHERE A != B”, “WHERE A > B”, “WHERE A < B”, and “WHERE A <> B” would all qualify as inequality. Next is the ‘included_columns’ column which list all columns that would be beneficial to the optimizer for purposes of providing a covering index and preventing key/bookmark lookups. Lastly is the ‘statement’ column which lists the name of the table where the index is missing.

This DMV can help you identify potential indexes that could be added to improve the performance of your system. However, I will advise you not to just take the output of this DMV and create an index for everything you see. Everything listed here should be analyzed and then tested on a Development or Test system before implementing into a Production environment.

For more information on this DMV, please see the below Books Online link:

http://msdn.microsoft.com/en-us/library/ms345434.aspx

Follow me on Twitter @PrimeTimeDBA

© SQL Blog or respective owner