SQLServerのユーザーDBで、6ヶ月以上使われていないインデックスを抽出し削除する事で、不要なインデックスを増やさない。定期メンテナンス用のSQL。
use (ユーザーDB名)
Declare @create_limit datetime
Select @create_limit = DATEADD(MONTH, -6, GETDATE()) -- 6ヶ月以上前に作成されたインデックスが対象
SELECT OBJECT_SCHEMA_NAME(i.[object_id]) as [Shema Name], OBJECT_NAME(i.[object_id]) AS [Table Name] ,i.name as [Index Name], o.create_date, o.modify_date
FROM sys.indexes AS i
INNER JOIN sys.objects AS o ON i.[object_id] = o.[object_id]
WHERE i.index_id NOT IN (
SELECT s.index_id
FROM sys.dm_db_index_usage_stats AS s
WHERE s.[object_id] = i.[object_id]
AND i.index_id = s.index_id
)
AND o.[type] = 'U'
AND i.is_primary_key != 1 -- Primary Key を除外
AND i.is_unique_constraint != 1 -- Unique Key を除外
AND i.name is not null
AND o.create_date < @create_limit
AND OBJECT_SCHEMA_NAME(i.[object_id]) not in('capsim') -- 対象外のスキーマを除外
ORDER BY OBJECT_SCHEMA_NAME(i.[object_id]), OBJECT_NAME(i.[object_id]) ASC, create_date ;
【関連記事】
チューニングアドバイザーによる、インデックスと統計情報の抽出と追加
テーブルの統計情報を、週次で更新
ストアドとファンクションを、日次のジョブで毎朝リコンパイル
IISと関連サービスを、日次で毎朝再起動。
IISと関連サービスからのDB処理が、極端に遅くなるストアド、ファンクションは、使用するインデックスをヒント文で固定する
SQLServerで、IISからのDB処理だけが遅い場合は、ストアドをリコンパイルする
SQLServer 2005 インデックス チューニング ライフサイクル
6ヶ月以上使われていないインデックスを抽出するSQL
最近のコメント