Can you please explain what a bad index in SQL Server is?
You can call a index as bad when the column to which it is created on is never being used. And you are doing a lot of update operation on the same column in your table. You can try this query to identify the bad index: Finding Bad Indexes Using SQL Server
SELECT OBJECT_NAME(s.object_id) AS 'Table Name',
i.name AS 'Index Name',
i.index_id,
user_updates AS 'Total Writes',
user_seeks + user_scans + user_lookups AS 'Total Reads',
user_updates - ( user_seeks + user_scans + user_lookups ) AS 'Difference'
FROM sys.dm_db_index_usage_stats AS s WITH ( NOLOCK )
INNER JOIN sys.indexes AS i WITH ( NOLOCK ) ON s.object_id = i.object_id
AND i.index_id = s.index_id
WHERE OBJECTPROPERTY(s.object_id, 'IsUserTable') = 1
AND s.database_id = DB_ID()
AND user_updates > ( user_seeks + user_scans + user_lookups )
AND i.index_id > 1
ORDER BY 'Difference' DESC,
'Total Writes' DESC,
'Total Reads' ASC ;
-- Index Read/Write stats for a single table
SELECT OBJECT_NAME(s.object_id) AS 'TableName',
i.name AS 'IndexName',
i.index_id,
SUM(user_seeks) AS 'User Seeks',
SUM(user_scans) AS 'User Scans',
SUM(user_lookups) AS 'User Lookups',
SUM(user_seeks + user_scans + user_lookups) AS 'Total Reads',
SUM(user_updates) AS 'Total Writes'
FROM sys.dm_db_index_usage_stats AS s
INNER JOIN sys.indexes AS i ON s.object_id = i.object_id
AND i.index_id = s.index_id
WHERE OBJECTPROPERTY(s.object_id, 'IsUserTable') = 1
AND s.database_id = DB_ID()
AND OBJECT_NAME(s.object_id) = 'AccountTransaction'
GROUP BY OBJECT_NAME(s.object_id),
i.name,
i.index_id
ORDER BY 'Total Writes' DESC,
'Total Reads' DESC ;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With