Read missing index DMVs with a cost filter
Missing index DMVs are noisy. Rank suggestions by impact so you only review the ones that matter.
SQL Server records where it thinks an index would have helped. Treat these as clues, not orders.
SELECT TOP (20)
ROUND(migs.avg_total_user_cost
* migs.avg_user_impact
* (migs.user_seeks + migs.user_scans), 0) AS improvement_measure,
mid.statement AS table_name,
mid.equality_columns,
mid.inequality_columns,
mid.included_columns,
migs.user_seeks,
migs.user_scans,
migs.avg_total_user_cost,
migs.avg_user_impact
FROM sys.dm_db_missing_index_groups AS mig
INNER JOIN sys.dm_db_missing_index_group_stats AS migs
ON migs.group_handle = mig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details AS mid
ON mig.index_handle = mid.index_handle
WHERE mid.database_id = DB_ID()
ORDER BY improvement_measure DESC;
Before creating anything:
- Check for overlapping existing indexes
- Prefer consolidating similar suggestions
- Validate with actual query plans and write overhead
- Remember DMVs reset on service restart
Missing-index recommendations are a starting point for tuning — not a shopping list.
Want this applied to your estate?
We help South African teams implement maintenance and performance improvements properly.