0

Azure 用于自动调整的 SQL 数据库功能会根据数据库使用情况创建和删除索引。我已经将一个旧数据库导入 Azure,它没有定义全面的索引,它似乎在相对较短的时间内减少 CPU 和 DTU 使用率方面做得很好。

感觉不对 - 但这是否意味着我可以在不定义索引的情况下继续发展?有人这样做吗?SSMS 索引编辑器是一个痛苦和缓慢的修改。不必担心/维护索引会加快开发时间。

4

1 回答 1

3

自动调整利用了三个方面,查询存储、缺失索引和机器学习。

首先,最后一个已知的好计划是查询存储的武器化。这在 Azure 和 SQL Server 2017 中都有。它会发现在计划更改后性能下降的查询(以及相当多的执行,而不仅仅是一次),并将恢复到该计划。如果性能下降,它会关闭它。这很棒。但是,如果您编写垃圾代码或有错误的数据结构或过时的统计数据,它并没有多大帮助。

Azure 中的自动索引使用了两件事,缺少优化器的索引建议和 Azure 上的机器学习。有了这些,如果丢失的索引在 12-18 小时内出现很多(阅读这篇关于自动化的博客文章),你会得到一个索引建议。它会再测量 12-18 小时,如果该指数有帮助,它会继续存在,如果没有,它会继续。这也很棒。然而,它存在两个问题。首先,和以前一样,如果你有垃圾代码等,这只会在边际上真正有帮助。其次,来自优化器的缺失索引建议并不总是最好的索引。例如,当我写博客文章时,它适当地识别了一个缺失的索引,但它忽略了一个事实,即 INCLUDE 列会比它建议的索引更好。

人脑和眼球仍将解决更困难的问题。这些自动化解决了许多更容易、容易解决的问题。总的来说,这是一件很棒的事情。但是,不要将它与性能相关的所有事情的灵丹妙药混为一谈。绝对不是。

于 2018-05-10T10:41:35.217 回答