sys.dm_db_stats_properties (Transact-SQL)
現在の SQL Server データベース内にある指定されたデータベース オブジェクト (テーブルまたはインデックス付きビュー) について、統計のプロパティを返します。
注 |
---|
動的管理オブジェクト sys.dm_db_stats_properties は、SQL Server 2012 Service Pack 1 以降および SQL Server 2008 R2 Service Pack 2 以降で使用できます。 |
構文
sys.dm_db_stats_properties (object_id, stats_id)
引数
object_id
統計のプロパティが要求された、現在のデータベース内にあるオブジェクトの ID です。 object_id のデータ型は int です。stats_id
指定した object_id の統計の ID を指定します。 統計 ID は、sys.stats 動的管理ビューから取得できます。 stats_id のデータ型は int です。
返されるテーブル
列名 |
データ型 |
説明 |
---|---|---|
object_id |
int |
統計オブジェクトのプロパティを返す対象であるオブジェクト (テーブルまたはインデックス付きビュー) の ID。 |
stats_id |
int |
統計オブジェクトの ID。 テーブルまたはインデックス付きビューで一意です。 詳細については、「sys.stats (Transact-SQL)」を参照してください。 |
last_updated |
datetime2 |
オブジェクトが最後に更新された日付と時刻。 |
rows |
bigint |
統計情報が最後に更新された時点のテーブルまたはインデックス付きビューの行の総数。 統計がフィルター選択されている場合、またはフィルター選択されたインデックスに対応している場合は、行数がテーブルの行数よりも少なくなることがあります。 |
rows_sampled |
bigint |
統計の計算時にサンプリングされた行の合計数。 |
steps |
int |
ヒストグラムの区間の数。 詳細については、「DBCC SHOW_STATISTICS (Transact-SQL)」を参照してください。 |
unfiltered_rows |
bigint |
フィルター式を適用する前のテーブル内の行の合計数 (フィルター選択された統計情報の場合)。 統計情報がフィルター選択されていない場合、unfiltered_rows は、rows 列に返される値に等しくなります。 |
modification_counter |
bigint |
統計情報が前回更新されてから先頭の統計列 (構築するヒストグラムの基になる列) に対して行われた変更の総数。 |
説明
次のいずれかの条件に該当した場合、sys.dm_db_stats_properties は空の行セットを返します。
object_id または stats_id が NULL。
指定したオブジェクトが見つからないか、テーブルまたはインデックス付きビューに対応しない。
指定した統計 ID が、指定したオブジェクト ID の既存の統計情報に対応しない。
現在のユーザーに統計オブジェクトを表示する権限がない。
この動作によって、sys.objects や sys.stats などのビュー内の行へのクロス適用時に、sys.dm_db_stats_properties を安全に使用できます。
権限
ユーザーは、統計情報列に対する SELECT 権限を持っているか、テーブルを所有しているか、固定サーバー ロール sysadmin、固定データベース ロール db_owner、または固定データベース ロール db_ddladmin のメンバーである必要があります。
使用例
A. テーブルのすべての統計プロパティを返す
次の例では、テーブル TEST に関して存在するすべての統計のプロパティを返します。
SELECT
sp.stats_id, name, filter_definition, last_updated, rows, rows_sampled, steps, unfiltered_rows, modification_counter
FROM sys.stats AS stat
CROSS APPLY sys.dm_db_stats_properties(stat.object_id, stat.stats_id) AS sp
WHERE stat.object_id = object_id('TEST');
B. 頻繁に変更されるオブジェクトの統計プロパティを返す
次の例では、統計が前回更新されてからの先頭列の変更が 1,000 回を超える、現在のデータベース内にあるすべてのテーブル、インデックス付きビュー、および統計を返します。
SELECT
obj.name, obj.object_id, stat.name, stat.stats_id, last_updated, modification_counter
FROM sys.objects AS obj
JOIN sys.stats stat ON stat.object_id = obj.object_id
CROSS APPLY sys.dm_db_stats_properties(stat.object_id, stat.stats_id) AS sp
WHERE modification_counter > 1000;
関連項目
参照
DBCC SHOW_STATISTICS (Transact-SQL)