我刚刚索引了一个返回 1.26 亿行的视图。
有一个进程使用此视图通过触发器更新行,这是迄今为止我的数据库中最昂贵的进程。
我正在监控这个新的索引使用 DMV,我强烈地感觉到维护这个索引涉及太多的处理能力来平衡它的有用性。
运行下面的查询,它告诉我每 2-5 秒就有一个用户在该索引上搜索。在同一时间范围内,将有大约 250-1000 个用户更新。由于它是 15 分钟前创建的,因此 USER_SEEKS=386 而 USER_UPDATES=102 876。
是否有一个神奇的比率,您可以放心地说维护这样一个索引是不值得的?
SELECT OBJECT_NAME(S.[OBJECT_ID]) AS [OBJECT NAME],
I.[NAME] AS [INDEX NAME],
USER_SEEKS,
USER_SCANS,
USER_LOOKUPS,
USER_UPDATES
FROM SYS.DM_DB_INDEX_USAGE_STATS AS S
INNER JOIN SYS.INDEXES AS I ON I.[OBJECT_ID] = S.[OBJECT_ID] AND I.INDEX_ID = S.INDEX_ID
WHERE OBJECTPROPERTY(S.[OBJECT_ID],'IsUserTable') = 1
AND S.database_id = DB_ID()
and I.NAME ='<index_name_goes_here>'
是否有一个神奇的比率,您可以放心地说维护这样一个索引是不值得的?
不存在一个神奇的数字。您可能有一个很少使用的索引(与更新次数相比),但支持该查询对您的业务/用户很重要。
这是一个只有您可以根据您的业务/用户需求进行的调用。
如果要测试,请不要删除索引。您可以通过保留有关索引的元数据的方式禁用索引。这是一篇关于此的好文章。
Jes Borland 的禁用与删除索引。