【问题标题】:Dropping Unused Indexes删除未使用的索引
【发布时间】:2020-02-17 01:15:13
【问题描述】:

我指的是未使用的索引脚本博客。

我知道如果Seek = 0Scan = 0Lookup = 0User Update = 0,那么我们应该删除索引,因为它不需要。

未使用的脚本给了我很多索引,但我应该删除所有这些索引吗?您能否帮助我理解从给定脚本中识别实际未使用的索引。

在删除之前,我想知道UserSeekUserScansUserLookupsUserUpdates 列之间的重要性。

【问题讨论】:

  • 鉴于我们不知道您使用的是哪个脚本,也不知道输出是什么样的,因此很难为您提供帮助。
  • 请不要使用图像来发布代码 - 将其发布为文本并将其格式化为代码,以便尝试提供帮助的人可以将其复制并粘贴出来进行测试(我不会输入全部重新开始)。
  • 谢谢 Dale K。我已经添加了脚本。
  • drop index 语句(查询的最后一列)显示可以删除哪个索引。
  • 为了更好地理解您所询问的术语,请在 google 上搜索它们,那里有很多教程和参考文档可以帮助您。当您阅读一些文档并且不了解特定内容时提出问题。

标签: sql-server sql-tuning database-tuning database-tuning-advisor


【解决方案1】:

seeksscanslookups 是有利于查询性能的读取操作。 updates 是对索引的插入或更新。这些更新被认为是索引的负面影响。

索引魔法中的第一条也是唯一一条规则是:在更改索引之前备份索引。只需编写脚本并将它们保存以备后用。请务必注明文件的日期,以便关联任何数据库性能下降。

需要了解的几点:

  1. 您引用的列(UserSeek 等)来自 MSSQL DMV(动态管理视图)。这些指标是短暂的,这意味着每次重新启动服务(例如服务器重新启动)时都会重置它们。因此请记住,搜索、扫描等不会反映历史活动。
  2. 即使是一个索引有很多更新和很少的有益操作 - 有益的操作可能非常重要。他们(例如)可能负责执行一个查询,否则该查询会在几秒钟内执行一个小时。
  3. 即使您在数月内没有在索引上看到有益的活动,但使用该软件的软件中一些很少访问的部分仍可能使用它 - 例如某种每月或每年的维护。

同样,在删除任何内容之前备份索引。

【讨论】:

  • 或者首先禁用它们。
  • 感谢 NTDLS 和 DaleK。如果我在 Seek 中没有找到任何值但在 Scan and Update 中有值,我可以考虑删除索引吗?
  • @Yatin 更新索引发生在插入/更新与索引标准匹配的行时,但不考虑使用索引,即维护索引以使其保持最新。所以你可以从索引是否被使用的角度来忽略这一点。但是,如果查询使用索引进行扫描,那么如果删除该索引,性能可能会发生变化。这就是我的意思,在你考虑删除索引之前,你需要更好地理解,因为影响可能是巨大的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-19
  • 2019-09-08
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
相关资源
最近更新 更多