STATS_DATE (Transact-SQL)

适用于: SQL Server(所有受支持的版本) Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)

返回表或索引视图上统计信息的最新更新的日期。

有关更新统计信息的详细信息,请参阅统计信息

Transact-SQL 语法约定

语法

STATS_DATE ( object_id , stats_id )  

注意

若要查看 SQL Server 2014 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

object_id
具有统计信息的表或索引视图的 ID。

stats_id
统计信息对象的 ID。

返回类型

如果成功,则返回 datetime。 如果未创建统计信息 blob,则返回 NULL

备注

系统函数可以在选择列表、WHERE 子句和任何允许使用表达式的地方使用。

统计信息更新日期连同直方图密度矢量一起存储在统计信息 blob 对象中,而不是存储在元数据中。 如果未读取到任何数据,无法生成统计信息数据,则不会创建统计信息 blob,且该日期不可用。 针对谓词不返回任何行或新的空表,筛选的统计信息便是这种情况。

如果统计信息对应于索引,则 sys.stats 目录视图中的 stats_id 值与 sys.indexes 目录视图中的 index_id 值相同

权限

若要查看表或索引视图的元数据,需要 db_owner 固定数据库角色中的成员身份或权限。

示例

A. 返回表的最近统计信息的日期

下面的示例返回 Person.Address 表上的每个统计信息对象的最新更新的日期。

USE AdventureWorks2012;  
GO  
SELECT name AS stats_name,   
    STATS_DATE(object_id, stats_id) AS statistics_update_date  
FROM sys.stats   
WHERE object_id = OBJECT_ID('Person.Address');  
GO  

如果统计信息对应于索引,则 sys.stats 目录视图中的 stats_id 值与 sys.indexes 目录视图中的 index_id 值相同,以下查询返回与上一查询相同的结果。 如果统计信息不对应于索引,则它们位于 sys.stats 结果中,但是不在 sys.indexes 结果中。

USE AdventureWorks2012;  
GO  
SELECT name AS index_name,   
    STATS_DATE(object_id, index_id) AS statistics_update_date  
FROM sys.indexes   
WHERE object_id = OBJECT_ID('Person.Address');  
GO  

示例:Azure Synapse Analytics 和 Analytics Platform System (PDW)

B. 了解已命名统计信息的上次更新时间

以下示例在 DimCustomer 表的 LastName 列上创建统计信息。 然后运行查询来显示统计信息的日期。 之后更新统计信息,并再次运行查询来显示更新后的日期。

--First, create a statistics object  
USE AdventureWorksPDW2012;  
GO  
CREATE STATISTICS Customer_LastName_Stats  
ON AdventureWorksPDW2012.dbo.DimCustomer (LastName)  
WITH SAMPLE 50 PERCENT;  
GO  
  
--Return the date when Customer_LastName_Stats was last updated  
USE AdventureWorksPDW2012;  
GO  
SELECT stats_id, name AS stats_name,   
    STATS_DATE(object_id, stats_id) AS statistics_date  
FROM sys.stats s  
WHERE s.object_id = OBJECT_ID('dbo.DimCustomer')  
    AND s.name = 'Customer_LastName_Stats';  
GO  
  
--Update Customer_LastName_Stats so it will have a different timestamp in the next query  
GO  
UPDATE STATISTICS dbo.dimCustomer (Customer_LastName_Stats);  
  
--Return the date when Customer_LastName_Stats was last updated.  
SELECT stats_id, name AS stats_name,   
    STATS_DATE(object_id, stats_id) AS statistics_date  
FROM sys.stats s  
WHERE s.object_id = OBJECT_ID('dbo.DimCustomer')  
    AND s.name = 'Customer_LastName_Stats';  
GO    

C. 查看表中所有统计信息的上次更新日期

此示例返回 DimCustomer 表中的每个统计信息对象最后一次更新的日期。

--Return the dates all statistics on the table were last updated.  
SELECT stats_id, name AS stats_name,   
    STATS_DATE(object_id, stats_id) AS statistics_date  
FROM sys.stats s  
WHERE s.object_id = OBJECT_ID('dbo.DimCustomer');  
GO  

如果统计信息对应于索引,则 sys.stats 目录视图中的 stats_id 值与 sys.indexes 目录视图中的 index_id 值相同,以下查询返回与上一查询相同的结果。 如果统计信息不对应于索引,则它们位于 sys.stats 结果中,但是不在 sys.indexes 结果中。

USE AdventureWorksPDW2012;  
GO  
SELECT name AS index_name,   
    STATS_DATE(object_id, index_id) AS statistics_update_date  
FROM sys.indexes   
WHERE object_id = OBJECT_ID('dbo.DimCustomer');  
GO  

另请参阅

系统函数 (Transact-SQL)
UPDATE STATISTICS (Transact-SQL)
sp_autostats (Transact-SQL)
统计信息
sys.dm_db_stats_properties (Transact-SQL)
sys.stats