STATS_DATE (Transact-SQL)
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics 分析平台系统 (PDW) Microsoft Fabric 中的 SQL 分析端点 Microsoft Fabric 中的仓库
返回表或索引视图上统计信息的最新更新的日期。
有关更新统计信息的详细信息,请参阅统计信息。
语法
STATS_DATE ( object_id , stats_id )
参数
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 AdventureWorks2022;
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 AdventureWorks2022;
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
Microsoft Fabric 中的统计信息