STATS_DATE (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス

テーブルまたはインデックス付きビューの統計の最終更新日を返します。

統計の更新について詳しくは、「統計」をご覧ください。

Transact-SQL 構文表記規則

構文

STATS_DATE ( object_id , stats_id )  

Note

SQL Server 2014 (12.x) 以前のバージョンの 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 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 の統計