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

时间:2016-04-28 15:46:51

标签: sql-server

为什么我这样做:

bullet

我能获得两个记录而不是一个吗?

我打算使用last_user_update来确定先前调用查询的某些本地缓存数据是否是最新的,或者是否因为表已更改而过期。

last_user_update列在此查询返回的两个记录中都相同。我可以只使用第一条记录中的值,还是可以区别?

请参阅下面的屏幕截图获取结果:

Screen Capture of results

holder

1 个答案:

答案 0 :(得分:5)

indexid为1表示聚集索引。

indexid为2是非聚集索引。

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

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

您可能会因为您的方法而得到误报,因为此列只显示执行执行计划的最后一次,其中包含可以更新此索引的运算符,而不是确实发生了更新。此外,在服务重新启动或数据库设置为脱机后,这些值将为null(自动关闭时可能会发生这种情况)。