Sql server 为什么从sys.dm\u db\u index\u usage\u stats选择返回两行/表?
为什么我这样做:Sql server 为什么从sys.dm\u db\u index\u usage\u stats选择返回两行/表?,sql-server,Sql Server,为什么我这样做: 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来确定来自上一次查询调用的某些本地缓存数据是否为当前数据,或者是否因为表已更改而过时 此查询返回的两条记录中的最后一个用户更新
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来确定来自上一次查询调用的某些本地缓存数据是否为当前数据,或者是否因为表已更改而过时
此查询返回的两条记录中的最后一个用户更新列相同。我可以只使用第一条记录中的值吗,或者它们可能不同
有关结果,请参见下面的屏幕截图:
indexid为1表示聚集索引 indexid为2是一个非聚集索引 如果表的结构为堆(无聚集索引),则可能还会看到indexid为0。这实际上不是索引,但针对它的操作仍显示在此视图中 关于第二个问题,非聚集索引是否涵盖您感兴趣的所有列?如果您只关心是否更新了任何列,那么您也可以查看聚集索引的行,因为任何更新都不可能影响NCI,但不会影响CI
尽管您的方法可能会出现误报,因为本栏仅显示了执行计划的最后一次执行,其中包含可以更新此索引的运算符,而不是肯定发生了更新。此外,服务重新启动或数据库设置为脱机状态后,这些值将为null(自动关闭时可能会出现这种情况)。此外,屏幕截图显示索引id为1,这是一个集群Index@Shaneis我没看那个。我阅读了下面的文本,似乎看到了属于下一列的0。谢谢,已编辑。+1 for“显示上次执行包含可更新此索引的操作员的执行计划的时间,而不是显示确实发生了更新。此外,在服务重新启动或数据库设置为脱机后,这些值将为空(自动关闭时可能会发生)。@TheGameiswar谢谢。更多细节在这里顺便说一句
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