重置SQL Server索引用法

时间:2013-07-06 04:53:39

标签: sql-server sql-server-2012

我使用以下查询来分析SQL Server中索引的使用情况。

SELECT * 
FROM sys.dm_db_index_usage_stats A
WHERE A.database_id = DB_ID()

如何重置此系统表中的所有数据。(我使用的是SQL Server 2012)

提前致谢

2 个答案:

答案 0 :(得分:10)

reset是什么意思..你想重置表格中的索引使用统计数据吗?

取自Here

  

使用情况统计信息:可在sys.dm_db_index_usage_stats中找到。   索引使用情况统计信息可跟踪搜索和扫描等内容   SELECT查询。它们不会持久化并在重新启动sql时重置   服务器。如果基础索引是,则这些统计信息也会重置   重建“ALTER INDEX ... REBUILD”,但没有“ALTER INDEX ......   REORG“

如上所述,您无法手动重置它。看看这篇帖子肯定会说同样的话

http://social.msdn.microsoft.com/Forums/sqlserver/en-US/08eb7b79-64a3-4475-bfc3-69715aec8381/resetting-dmdbindexusagestats-without-restarting-or-detaching-a-database

答案 1 :(得分:0)

如前所述,如果不重新启动 SQL Server,您就无法真正重置它。

但是

为什么要重置它?可能是因为您对索引进行了更改,只是想看看使用情况发生了怎样的变化,对吗?

在这种情况下,您可以硬编码现有值到您的查询中,然后减去它以获得新的统计数据。

“硬编码”是指加入一个 VALUES 伪表,类似这样

--your SELECT goes here
--your FROM goes here
--add this JOIN
    JOIN ( VALUES('IX_index1',  2412727),
    ('IX_index2',   1630517),
    ('IX_index3',   514129)) o(name, seeks) ON o.name=indexes.name
-- rest of your query

现在您可以将其添加到您的 SELECT 中以获取差异:dm_db_index_usage_stats.user_seeks - o.seeks

简而言之:

  1. dm_db_index_usage_stats 中选择现有的使用统计数据
  2. 做一些复制粘贴魔术,将现有的统计数据和硬编码到您的查询中
  3. 查看更改