8

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

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

如何重置此系统表中的所有数据?

4

2 回答 2

12

..是什么意思reset。要重置表中的索引使用统计信息吗?

取自这里

使用统计:这些位于 sys.dm_db_index_usage_stats。索引使用统计信息跟踪诸如来自 SELECT 查询的搜索和扫描之类的事情。它们不会持久化并在 sql server 重新启动时重置。如果基础索引被重建“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

于 2013-07-06T04:58:51.353 回答
1

如前所述,如果不重新启动 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 以获得差异:

SELECT dm_db_index_usage_stats.user_seeks - o.seeks AS newseeks

简而言之:

  1. 从中选择现有的使用情况统计信息dm_db_index_usage_stats
  2. 做一些复制粘贴魔术来将现有的统计信息和硬编码到您的查询中
  3. 查看更改
于 2021-06-26T09:38:29.917 回答