簡體   English   中英

SQL Server 索引使用統計

[英]SQL Server index usage stats

我運行了下面的查詢以查找要刪除的索引。

SELECT d.name AS DatabaseName, t.name AS TableName, i.name AS IndexName, ius.*
FROM sys.dm_db_index_usage_stats ius
JOIN sys.databases d ON d.database_id = ius.database_id
JOIN sys.tables t ON t.object_id = ius.object_id
JOIN sys.indexes i ON i.object_id = ius.object_id AND i.index_id =
ius.index_id
ORDER BY user_updates DESC

但是返回的結果集非常混亂。 我收到具有不同 database_ids 和名稱的相同索引的多行。 假設我們有一個索引,它的名字是 IDXName,它的名字是 IDXID。 該索引位於 DB1 數據庫中的 TBL1 下。 但是該索引有多個行具有相同的索引名稱和相同的索引 id 以及相同的表名稱但不同的數據庫 id。

我仔細檢查了 Microsoft 文檔,它確認該視圖中的數據庫 ID 是索引所在的數據庫。 那么我怎么會有該索引不存在的數據庫的ID呢?

Yoy 沒有對當前數據庫進行線性查詢,這就是為什么您會看到來自不同數據庫的索引數據:

SELECT d.name AS DatabaseName, t.name AS TableName, i.name AS IndexName, ius.*
FROM sys.dm_db_index_usage_stats ius
JOIN sys.databases d ON d.database_id = ius.database_id
JOIN sys.tables t ON t.object_id = ius.object_id
JOIN sys.indexes i ON i.object_id = ius.object_id AND i.index_id = ius.index_id
WHERE d.database_id = db_id()
ORDER BY user_updates DESC

如果您只需要 sys.databases 中的數據庫名稱,則根本不需要連接:

SELECT db_name() AS DatabaseName, t.name AS TableName, i.name AS IndexName, ius.*
FROM sys.dm_db_index_usage_stats ius
JOIN sys.tables t ON t.object_id = ius.object_id
JOIN sys.indexes i ON i.object_id = ius.object_id AND i.index_id = ius.index_id
WHERE ius.database_id = db_id()
ORDER BY user_updates DESC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM