私は、プロダクション環境で使用されていないインデックスを検索するためのクエリを作成しましたが、last_user_update
カラムがインデックスがメンテナンスオーバヘッドだけだったかどうかが不思議ですそれを削除すると良いでしょう、またはインデックスが挿入/更新/削除ステートメントの実行に役立ったかどうか、その場合は削除したくありません。以下は、私が使用したいクエリです:MSSQL:last_user_updateはインデックスのパフォーマンスが低下することを意味しますか?
DECLARE @DBInfo TABLE
(database_id int, object_id int, tablename nvarchar(200), indexname nvarchar(200), lastactivity datetime)
DECLARE @command VARCHAR(5000)
SELECT @command = 'Use [' + '?' + '] SELECT
database_id, o.object_id, o.name, i.name as indexname, max(lastactivity) as lastactivity
from (
select database_id, object_id, index_id, max(last_user_seek) as lastactivity from sys.dm_db_index_usage_stats
WHERE object_id > 1000
GROUP BY database_id, object_id, index_id
UNION ALL
select database_id, object_id, index_id, max(last_user_scan) as lastactivity from sys.dm_db_index_usage_stats
WHERE object_id > 1000
GROUP BY database_id, object_id, index_id
UNION ALL
select database_id, object_id, index_id, max(last_user_lookup) as lastactivity from sys.dm_db_index_usage_stats
WHERE object_id > 1000
GROUP BY database_id, object_id, index_id
/*UNION ALL
select database_id, object_id, index_id, max(last_user_update) as lastactivity from sys.dm_db_index_usage_stats
WHERE object_id > 1000
GROUP BY database_id, object_id, index_id*/
) a
inner join sys.objects o on a.object_id = o.object_id
inner join sys.indexes i on i.object_id = a.object_id AND i.index_id = a.index_id
where database_id = db_id()
GROUP BY database_id, o.object_id, o.name, i.name
order by lastactivity'
INSERT INTO @DBInfo
(database_id, object_id, tablename, indexname, lastactivity)
EXEC sp_MSForEachDB @command
SELECT db_name(database_id) as dbname, tablename, indexname, lastactivity FROM @DBInfo
where lastactivity < dateadd(day, -15, getdate()) or lastactivity is null
order by db_name(database_id), tablename, indexname
ありがとう:
は、未使用のインデックスを検索します。私はuser_updatesカラムが同じ質問を提起すると思います:それは悪くて良いですか? user_updatesがデータ変更のパフォーマンスを助けたり、それを傷つけたりしましたか? –
詳細情報を追加しました。実際にこの列を使用していませんでした:主に用途を調べました。 – gbn