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
這是目前資料庫中,要求其中一個統計資料屬性之物件的識別碼。 object_id 是 int。stats_id
這是指定 object_id 之統計資料的識別碼。 您可以從 sys.stats 動態管理檢視取得統計資料識別碼。 stats_id 是 int。
傳回的資料表
資料行名稱 |
資料類型 |
描述 |
---|---|---|
object_id |
int |
要傳回統計資料物件屬性之物件 (資料表或索引檢視表) 的識別碼。 |
stats_id |
int |
統計資料物件的識別碼。 這在資料表或索引檢視表中是唯一的。 如需詳細資訊,請參閱<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。
找不到指定的物件,或者該物件沒有對應至資料表或索引檢視表。
指定的統計資料識別碼沒有對應至指定之物件識別碼的現有統計資料。
目前的使用者沒有檢視統計資料物件的權限。
交叉套用至 sys.objects 和 sys.stats 等檢視表中的資料列時,這種行為可讓您安全地使用 sys.dm_db_stats_properties。
權限
要求使用者對於統計資料資料行擁有選取權限,或是使用者擁有資料表,或使用者是 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.傳回經常修改之物件的統計資料屬性
下列範例會傳回目前資料庫中,自從上次更新統計資料以來修改前端資料行超過 1000 次的所有資料表、索引檢視表和統計資料。
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;