分享方式:


STATS_DATE (Transact-SQL)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 的 SQL 端點分析 Microsoft Fabric 的倉儲

針對資料表或索引檢視表的統計資料傳回最近更新的日期。

如需有關更新統計資料的詳細資訊,請參閱 統計資料

Transact-SQL 語法慣例

語法

STATS_DATE ( object_id , stats_id )  

引數

object_id
包含統計資料之資料表或索引檢視表的識別碼。

stats_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 中的統計數據