gpt4 book ai didi

sql-server - 为什么 SELECT FROM sys.dm_db_index_usage_stats 返回两行/表?

转载 作者:行者123 更新时间:2023-12-03 22:19:01 24 4
gpt4 key购买 nike

为什么我这样做:

SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName, last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE OBJECT_ID=OBJECT_ID('TestTableName')

我得到的是两条记录而不是一条吗?

我计划使用 last_user_update 来确定之前调用查询的一些本地缓存数据是否是最新的,或者是否可能因为表已更改而过时。

此查询返回的两条记录中的 last_user_update 列是相同的。我可以只使用第一条记录中的值,还是它们可能不同?

查看下面的屏幕截图以获取结果:

Screen Capture of results

DatabaseName    last_user_update    database_id object_id   index_id    user_seeks  user_scans  user_lookups    user_updates    last_user_seek  last_user_scan  last_user_lookup    last_user_update    system_seeks    system_scans    system_lookups  system_updates  last_system_seek    last_system_scan    last_system_lookup  last_system_update
TestTableName 2016-04-27 07:53:51.740 5 939150391 1 0 101556 101557 6 NULL 2016-04-28 07:27:17.933 2016-04-28 07:27:17.927 2016-04-27 07:53:51.740 0 3 0 0 NULL 2016-04-27 07:52:49.203 NULL NULL
TestTableName 2016-04-27 07:53:51.740 5 939150391 2 101559 3 0 6 2016-04-28 07:27:17.927 2016-04-26 17:31:21.200 NULL 2016-04-27 07:53:51.740 0 1 0 0 NULL 2016-04-27 18:21:53.977 NULL NULL

最佳答案

indexid为1代表聚簇索引。

indexid为2的是非聚簇索引。

如果表的结构为堆(无聚簇索引),您可能还会看到 indexid 为 0,这实际上不是索引,但无论如何都会在此 View 中显示针对它的操作。

关于您的次要问题,非聚集索引是否涵盖您感兴趣的所有列?如果您只关心任何列是否更新,您不妨只查看聚集索引的行,因为任何更新都不可能影响 NCI 而不是 CI。

尽管您的方法可能会出现误报,因为此列仅显示上次执行包含可更新此索引的运算符的执行计划的时间,而不是确定确实发生了更新。此外,在服务重启或数据库设置为离线(自动关闭时可能发生)后,这些值将为空。

关于sql-server - 为什么 SELECT FROM sys.dm_db_index_usage_stats 返回两行/表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36919537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com