인덱스를 삭제하기 위해 프로덕션 환경에서 사용되지 않는 인덱스를 찾기 위해 쿼리를 작성했습니다. 그러나 last_user_update
열이 색인이 전적으로 유지 관리 오버 헤드라는 표시인지 여부가 궁금합니다. 그것을 삭제하는 것이 좋을 것입니다, 또는 인덱스가 insert/update/delete 구문의 수행을 도왔는지, 나는 그것을 버리고 싶지 않을 것입니다. 다음은 사용하고자하는 쿼리입니다.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