Skip to content

Instantly share code, notes, and snippets.

@petesql
Created December 19, 2024 19:45
Show Gist options
  • Save petesql/3c367cc44be62809272561d3dbe45e1d to your computer and use it in GitHub Desktop.
Save petesql/3c367cc44be62809272561d3dbe45e1d to your computer and use it in GitHub Desktop.
Show Missing Indexes SQL Server
-- This query retrieves and suggests missing index information from the DMV (Dynamic Management Views) in SQL Server.
-- It calculates an improvement measure for each missing index and generates a CREATE INDEX statement to address the missing index.
SELECT
CONVERT(varchar(30), 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;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment