表可以有多個索引。動態管理視圖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