- Make sure to change the database name in 2 places
- Decide how many of these you want. I (somewhat arbitrarily) set an 80% impact threshold on what I'm bringing back; you may want to adjust this.
use YourDatabaseName
select
'create index
IX_' +
replace(replace(replace (equality_columns, '[', ''),']',''),', ','_') +
' on '
+
sch.name
+ '.' + obj.name +
' ('
+
equality_columns +
case
when inequality_columns is null
then ''
else ',' +
inequality_columns end +
')' +
case
when included_columns is
not null then
'
include (' +
isnull(included_columns,'') +
') '
else '' end +
' -- '
+ convert (varchar,
avg_user_impact) +
'% anticipated impact'
from sys.dm_db_missing_index_details mid join
sys.dm_db_missing_index_groups
mig
on mid.index_handle = mig.index_handle join
sys.dm_db_missing_index_group_stats
migs
on migs.group_handle = mig.index_group_handle
join
sys.objects
obj on obj.object_id = mid.object_id join
sys.schemas
sch on obj.schema_id = sch.schema_id
where db_name(database_id) = 'YourDatabaseName' and
avg_user_impact > 80
order by obj.name, equality_columns --avg_user_impact
desc