查询dm_db_index_usage_stats返回空行

时间:2019-03-27 15:41:01

标签: sql sql-server tsql

我有一个用户告诉我我们的应用程序中的某些数据已更改。

使用this example,在填充应用程序中数据的表上运行以下查询:

SELECT OBJECT_NAME(OBJECT_ID) AS TableName,
 last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( 'Mydatabase')
AND OBJECT_ID=OBJECT_ID('mytable')

我没有退回任何行,所以似乎表中没有更新的数据历史记录?

我跑了

SELECT OBJECT_NAME(OBJECT_ID) AS TableName,
 last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( 'Mydatabase')

我得到了13行,但其中有几行的TableName为空。

1 个答案:

答案 0 :(得分:1)

第一点:

  

每当SQL Server计数器被初始化为空   (MSSQLSERVER)服务已启动。此外,只要数据库是   分离或关闭(例如,因为AUTO_CLOSE设置为   ON),与数据库关联的所有行都将被删除。

因此,如果您的服务器重新启动或您没有统计信息。

第二点:

在调用database_id函数时使用OBJECT_NAME参数

SELECT OBJECT_NAME(OBJECT_ID, DB_ID( 'Mydatabase')) AS TableName,
 last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( 'Mydatabase')