sys.dm_db_missing_index_details不返回任何行

时间:2011-03-29 02:38:25

标签: sql-server sql-server-2008 sql-server-2005 dmv

我试着查看sys.dm_db_missing_index_details以检查我的SQL Server 2005数据库上是否缺少索引。它没有返回任何行。

它可能是空的但很不可能,因为我没有在任何表上添加任何索引(除了通过创建主键获得的索引)。我也在运行单元测试以及adhoc开发测试(使用Linq to SQL),因此存在一些针对它的活动。

我是否需要打开此数据的捕获?

仅在某些版本的SQL Server 2005上支持此功能吗?

提前感谢任何帮助的努力。

2 个答案:

答案 0 :(得分:6)

默认情况下它似乎已启用 - 虽然检查您用于启动的任何快捷方式,并确保它不会使用-x启动

来自http://msdn.microsoft.com/en-us/library/ms345524(v=SQL.90).aspx

  

只有在使用带有sqlservr命令提示实用程序的-x参数启动SQL Server实例时,才能禁用此功能。

此外,如果SQL Server使用查询优化器,您还需要知道在运行查询时填充该表 - 重新启动SQL Server时清除此表

来自http://msdn.microsoft.com/en-us/library/ms345434(v=SQL.90).aspx

  

当查询优化器优化查询时,sys.dm_db_missing_index_details返回的信息会更新,并且不会保留。只有在重新启动SQL Server之前,才会保留缺少的索引信息。如果数据库管理员想要在服务器回收后保留索引信息,则应定期制作缺失索引信息的备份副本。

最后有一篇文章介绍了您可能会或可能不知道的限制,但我会发布以防其他人在此帖子和需求中发生的事情:http://msdn.microsoft.com/en-us/library/ms345485(v=SQL.90).aspx

我没有看到某些版本中缺少该功能的任何内容,但您需要某些权限:

  

必须授予用户VIEW SERVER STATE权限或任何暗示查询此动态管理视图的VIEW SERVER STATE权限的权限。

答案 1 :(得分:1)

另一种选择是直接查询计划缓存 - 这样做的好处是可以获得想要索引的查询。有一个相关的问题here on SO - BankZ的答案有一个完整的SQL脚本来完成这项工作。

它可能运行缓慢 - 计划采用XML格式,因此使用此查询,我们要求SQL Server执行大量XML工作而不是表工作。但它确实有效: - )

与主要缺失索引表一样,如果重新启动SQL Server,则会清除计划缓存。