【发布时间】:2014-04-02 01:57:14
【问题描述】:
我已运行以下查询以查找要删除的索引。
SELECT d.name AS DatabaseName, t.name AS TableName, i.name AS IndexName, ius.*
FROM sys.dm_db_index_usage_stats ius
JOIN sys.databases d ON d.database_id = ius.database_id
JOIN sys.tables t ON t.object_id = ius.object_id
JOIN sys.indexes i ON i.object_id = ius.object_id AND i.index_id =
ius.index_id
ORDER BY user_updates DESC
但是返回的结果集相当混乱。我收到具有不同 database_id 和名称的相同索引的多行。假设我们有一个索引,它的名称是 IDXName,它是 IDXID。该索引在 DB1 数据库中的 TBL1 下。但是该索引有多个行,具有相同的索引名称和相同的索引 id 以及相同的表名但不同的数据库 id。
我仔细检查了 Microsoft 文档,并确认该视图中的数据库 ID 是索引所在的数据库。那我怎么会有那个索引不存在的数据库的ID呢?
【问题讨论】:
-
那么你的 join 语句肯定有错误。今年(2008 年)我也遇到了问题,所以不记得了。谷歌搜索 DMV 架构布局。我有一个 PDF 或我从 MS 那里得到的显示关系的东西。
-
如果我只为 sys.dm_db_index_usage_stats 视图运行没有连接的查询,结果基本上是相同的结果。我的结果具有相同的事件 ID、相同的对象 ID(表 ID)但不同的数据库 ID。但是每个数据库 id 对于一个事件只存在一次。我对此有一个理论,我想知道是否有人可以确认它,即使它不符合微软的文档。是否有可能如果一个数据库下的过程或某物通过索引访问另一个数据库下的表,那么他的索引使用统计视图也将其显示为一行?
-
你确定原因了吗?我碰巧遇到了完全相同的问题。
标签: sql sql-server indexing usage-statistics