- [SQL Server 2005]使用されていないインデックス一覧
sys.dm_db_index_usage_stats 動的管理ビューを使用して、SQL Server 2005 が起動、AUTO_CLOSE、デタッチ、シャットダウンされてからの統計を取得する
注意点として、システムテーブルや動的管理ビューを参照するときに WITH(NOLOCK) を記述して、ロックをかけないようにすること
バックグラウンドでトランザクションを発生させ、コミットしていない状態があるとシステムテーブルなどがロックされるため
※Tech・Ed 2007 Yokohama T6-402 デモの一部
-- 使用されていないインデックスリスト
-- sys.dm_db_index_usage_stats 動的管理ビューに存在していないもの
-- SQL Server 2005 の起動、AUTO_CLOSE、デタッチ、
-- シャットダウンすると初期化される
SELECT
i.object_id [オブジェクトID],
object_name(i.object_id) [オブジェクト名],
i.index_id [インデックスID],
i.name [インデックス名]
FROM
sys.indexes i WITH(NOLOCK),
sys.objects o WITH(NOLOCK)
WHERE
objectproperty(o.object_id, 'IsUserTable') = 1
AND
i.index_id NOT IN
(
SELECT
s.index_id
FROM
sys.dm_db_index_usage_stats s WITH(NOLOCK)
WHERE
s.object_id = i.object_id
AND
i.index_id = s.index_id
AND
s.database_id = DB_ID()
)
AND
o.object_id = i.object_id
ORDER BY
[オブジェクト名],
[インデックスID],
[インデックス名];