我試圖修改以下腳本以指向關聯的索引vw_foo
。這可能嗎?獲取特定視圖中引用的表的索引統計信息
SELECT name AS index_name,
STATS_DATE(OBJECT_ID, index_id) AS StatsUpdated
FROM sys.indexes
編輯
當我說「關聯」我的意思是用於
我試圖修改以下腳本以指向關聯的索引vw_foo
。這可能嗎?獲取特定視圖中引用的表的索引統計信息
SELECT name AS index_name,
STATS_DATE(OBJECT_ID, index_id) AS StatsUpdated
FROM sys.indexes
編輯
當我說「關聯」我的意思是用於
可能創建視圖的基礎表上的索引,這將是對你有幫助 -
SELECT
SCHEMA_NAME(o.[schema_id]) + '.' + o.name
, s.name
, statistics_update_date = STATS_DATE(o.[object_id], stats_id)
FROM sys.objects o
JOIN sys.stats s ON o.[object_id] = s.[object_id]
WHERE o.[type] = 'V' AND o.name = 'vw_foo'
DECLARE @table_name SYSNAME
SELECT @table_name = 'dbo.vw_foo'
EDITED
當我說「關聯」我的意思是對被認爲
該查詢返回的在使用指定表的視圖列表使用 表的索引+顯示了有關使用索引的其他信息 -
SELECT
o.table_name
, b.view_name
, i.name
, stast_updates = STATS_DATE(i.[object_id], i.index_id)
, dm_ius.last_user_seek
, dm_ius.last_user_scan
, dm_ius.last_user_lookup
, dm_ius.last_user_update
, dm_ius.user_updates
, dm_ius.user_lookups
, dm_ius.user_scans
, dm_ius.user_seeks
FROM (
SELECT
table_name = s.name + '.' + o.name
, o.[object_id]
FROM sys.objects o
JOIN sys.schemas s ON o.[schema_id] = s.[schema_id]
WHERE o.[type] = 'U'
AND s.name + '.' + o.name = @table_name
) o
JOIN sys.indexes i ON o.[object_id] = i.[object_id]
AND i.[type] > 0
AND i.is_disabled = 0
AND i.is_hypothetical = 0
LEFT JOIN sys.dm_db_index_usage_stats dm_ius ON i.index_id = dm_ius.index_id AND dm_ius.[object_id] = i.[object_id]
OUTER APPLY (
SELECT
view_name = r.referencing_schema_name + '.' + r.referencing_entity_name
, r.referencing_id
FROM sys.dm_sql_referencing_entities (o.table_name, 'OBJECT') r
JOIN sys.objects o2 ON r.referencing_id = o2.[object_id]
WHERE o2.[type] = 'V'
) b
WHERE b.view_name IS NOT NULL
現有的答案很可能是地走向檢查sys.objects
的名字,但從來沒有做到這一點。但目前還沒有這樣做的必要,無論如何,由於OBJECT_ID()
功能可讓您以清潔的方式得到一個object_id
:
SELECT name AS index_name,
STATS_DATE(OBJECT_ID, index_id) AS StatsUpdated
FROM sys.indexes
WHERE object_id = OBJECT_ID('vw_foo')
+1這樣一個完整的答案。我沒有管理員權限,因此「sys.dm_db_index_usage_stats」不可訪問;但在其他方面非常有用 – whytheq