表可以有多个索引。动态管理视图sys.dm_db_index_usage_stats将为每个索引具有单独的条目。
如果你想看到的指数名称为每一个,试试这个:
SELECT
o.name as TableName,
i.name as IndexName,
istats.last_user_update
from sys.dm_db_index_usage_stats istats
inner join sys.objects o
on o.object_id = istats.object_id
inner join sys.indexes i
on i.index_id = istats.index_id
and i.object_id = istats.object_id
order by
o.name,
i.name
或者,如果你不关心这个,只是希望最后的更新时间,可以按表名称:
SELECT
o.name as TableName,
max(istats.last_user_update)
from sys.dm_db_index_usage_stats istats
inner join sys.objects o
on o.object_id = istats.object_id
group by
o.name
您可以直接执行插入到表中与此查询:
declare @Collect table (Name varchar(100),last_user_update datetime)
insert into @Collect
select
o.name as TableName,
istats.last_user_update
from sys.dm_db_index_usage_stats istats
inner join sys.objects o
on o.object_id = istats.object_id
inner join sys.indexes i
on i.index_id = istats.index_id
and i.object_id = istats.object_id
where database_id = db_id('SP3D_DB_RESEARCH_MDB')
此外,我ñ确信你的目标是什么,但是请理解,这个视图只包含对它们有活动的索引的条目。如果索引未使用,则不在此视图中。第一次访问在视图中创建一行。这个观点的真正有趣的东西是寻找和扫描信息。
从MSDN见本附注:
当使用索引,行添加到sys.dm_db_index_usage_stats 如果行不存在的指标。当添加该行时,其计数器初始设置为零。
如果你的目标是枚举所有的索引,然后显示所有他们的最后更新日期,你需要加入到SYS.INDEXES,然后离开加盟sys.dm_db_index_usage_stats。
我认为它是http://stackoverflow.com/questions/26289609/getting-last-user-update-time-for-all-tables-in-a-database – Recursive 2014-10-10 13:12:08
的重复SELECT DISTINCT * FROM @Collect ORDER BY last_user_update DESC' – bummi 2014-10-10 13:14:21
@Arnand,它不是重复的。这是该问题的后续行动。由于这是一个新问题,我不想编辑该问题以包含新问题。 – RBasniak 2014-10-10 13:15:09