When i had a problem a couple days ago about indexing, i've got this query to find
unused index in your database. If you are running this query, it might help you to
maintain your index easily. If you want to be sure your index is used, you can use this
query to showing the unused index.
Here it is:
declare @DBID int
set @DBID = db_id()
SELECT
C.name TableName,
B.name IndexName,
(isnull(A.user_seeks, 0) + isnull(A.user_scans, 0) + isnull(A.user_lookups, 0) +
isnull(A.system_seeks, 0) + isnull(A.system_scans, 0) + isnull(A.system_lookups, 0))
total_used,
A.user_seeks,
A.user_scans,
A.user_lookups,
A.user_updates,
A.system_seeks,
A.system_scans,
A.system_lookups,
A.system_updates,
A.last_user_seek,
A.last_user_scan,
A.last_user_lookup,
A.last_user_update,
A.last_system_seek,
A.last_system_scan,
A.last_system_lookup,
A.last_system_update,
B.type_desc,
B.is_unique,
D.name DataSpaceName,
D.type DataSpaceType,
D.is_default DataSpaceIsDefault,
B.ignore_dup_key,
B.is_primary_key,
B.is_unique_constraint,
B.fill_factor,
B.is_padded,
B.is_disabled,
B.is_hypothetical,
B.allow_row_locks,
B.allow_page_locks
FROM sys.indexes B
LEFT JOIN sys.dm_db_index_usage_stats A
ON A.index_id = B.index_id and A.object_id = B.object_id
AND A.database_id = @DBID
INNER JOIN sys.tables C
ON B.object_id = C.object_id
set @DBID = db_id()
SELECT
C.name TableName,
B.name IndexName,
(isnull(A.user_seeks, 0) + isnull(A.user_scans, 0) + isnull(A.user_lookups, 0) +
isnull(A.system_seeks, 0) + isnull(A.system_scans, 0) + isnull(A.system_lookups, 0))
total_used,
A.user_seeks,
A.user_scans,
A.user_lookups,
A.user_updates,
A.system_seeks,
A.system_scans,
A.system_lookups,
A.system_updates,
A.last_user_seek,
A.last_user_scan,
A.last_user_lookup,
A.last_user_update,
A.last_system_seek,
A.last_system_scan,
A.last_system_lookup,
A.last_system_update,
B.type_desc,
B.is_unique,
D.name DataSpaceName,
D.type DataSpaceType,
D.is_default DataSpaceIsDefault,
B.ignore_dup_key,
B.is_primary_key,
B.is_unique_constraint,
B.fill_factor,
B.is_padded,
B.is_disabled,
B.is_hypothetical,
B.allow_row_locks,
B.allow_page_locks
FROM sys.indexes B
LEFT JOIN sys.dm_db_index_usage_stats A
ON A.index_id = B.index_id and A.object_id = B.object_id
AND A.database_id = @DBID
INNER JOIN sys.tables C
ON B.object_id = C.object_id
INNER JOIN sys.data_spaces D
ON B.data_space_id = D.data_space_id
--WHERE C.name = 'SUBSIDY_REFUND_AMORTIZED' -- specify your table here
ORDER BY (A.user_seeks + A.user_scans + A.user_lookups + A.system_seeks + A.system_scans + A.system_lookups) desc
You can see the result, if total_used field is 0 this mean that index is unused. so you
better drop the index, to make your application better (impact to your insert and
update transaction). Another thing is your database size is getting smaller, because
the index has been dropped.
ON B.data_space_id = D.data_space_id
--WHERE C.name = 'SUBSIDY_REFUND_AMORTIZED' -- specify your table here
ORDER BY (A.user_seeks + A.user_scans + A.user_lookups + A.system_seeks + A.system_scans + A.system_lookups) desc
You can see the result, if total_used field is 0 this mean that index is unused. so you
better drop the index, to make your application better (impact to your insert and
update transaction). Another thing is your database size is getting smaller, because
the index has been dropped.
No comments:
Post a Comment