识别所需索引的工具

meh*_*tfi 9 index sql-server-2008 database-design sql-server sql-server-2008-r2

我想为我的数据库中的每个表创建最好的索引。SQL Server 中是否有查询或工具可以帮助完成此过程?

Aar*_*and 12

是的,有一些工具,比如数据库引擎优化顾问。它与 SQL Server 一起提供并做了一些非常讨厌的事情:

  • 它允许您只考虑非常小的工作负载(甚至是单个查询)。然后,它会建议可能仅有助于小工作负载的索引,而不考虑其余的工作负载(索引有助于加速某些查询,但它们可以减慢其他查询,尤其是插入/更新/删除),不要介意其余的的商业周期。
  • 它通常会推荐冗余索引,这些索引仅因尾随列或包含的列而异。
  • 它真的,真的,真的很喜欢包含的列 - 我认为这可能是一种迷信。

索引调优的正确方法是在整个业务周期内考虑整个工作负载。有时使用 3rd 方工具比重新发明轮子更好。DBSophic制作了一个名为 Qure Workload Analyzer 的免费产品,我认为它比 DTA 做得更好——但他们的许可工具(Qure Workload Optimizer)在它的作用上绝对是惊人的。去年,我在博客中介绍了该工具与 SQL Sentry 集成时的工作原理)。

还有一些其他选项,例如 DMV 中报告缺少索引,您还可以发现正在写入哪些索引(因此它们占用空间并影响插入/更新/删除操作)但从不(或很少) 由用户查询使用:

但是这些还需要注意的是,DMV 仅自上次 SQL Server 重新启动以来才有效,并且它们不一定涵盖正确的业务周期(因此可能会丢失重要信息


Tho*_*ger 6

您正在谈论的工具称为数据库引擎优化顾问(简称 DTA)。它可以接受许多输入,并就缺少索引之类的事情给出建议。但值得注意的是,这些只是建议,应仔细考虑,而不是盲目遵循 DTA 的建议。

DTA 教程链接

还值得注意的是,有用于收集此类信息的内置 DMV: