Quantcast
Channel: TechNet Blogs
Viewing all articles
Browse latest Browse all 34890

(SQL) Tip of the Day: Gathering Missing Indexes

$
0
0

Today’s (SQL) Tip…

This week I would like to go through the first few steps I like to send customers to troubleshoot their performance issues in SQL Azure. First and foremost, the easiest win we have is to check out missing indexes. Indexes can have a profound impact on performance in SQL Azure especially if you are seeing a large amount of SOS_SCHEDULER_YIELD waits. My personal favorite article about missing indexes is Bart Duncan’s from 2007: http://blogs.msdn.com/b/bartd/archive/2007/07/19/are-you-using-sql-s-missing-index-dmvs.aspx

The article goes into what the values output mean, but a quick overview is the higher the “improvement_measure” the more it should help your performance. If you see a missing index with a high “user_seeks” value, which is the number of times the index could have been used, you will want to strongly consider adding it.

SELECT

migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) AS improvement_measure,

'CREATE INDEX [missing_index_' + CONVERT (varchar, mig.index_group_handle) + '_' + CONVERT (varchar, mid.index_handle)

+ '_' + LEFT (PARSENAME(mid.statement, 1), 32) + ']'

+ ' 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 migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (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

The query above is the meat of the article and will get you full statements to add missing indexes to your databases!


Viewing all articles
Browse latest Browse all 34890

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>