Azure 的 SQL 数据库自动调整功能会根据数据库使用情况创建和删除索引。我已将一个旧数据库导入到 Azure,该数据库没有定义全面的索引,但它似乎在相对较短的时间内减少了 CPU 和 DTU 使用量方面做得很好。
感觉不对 - 但这是否意味着我可以在不定义索引的情况下继续开发?有人这样做吗? SSMS 索引编辑器修改起来很痛苦且缓慢。不必担心/维护索引会加快开发时间。
最佳答案
自动调整利用了三件事:查询存储、缺失索引和机器学习。
首先,最后一个已知的好计划是查询存储的武器化。 Azure 和 SQL Server 2017 中都有这种情况。它将发现计划更改(以及相当多的执行,而不仅仅是一次)后性能下降的查询,并将恢复到该计划。如果性能下降,则会将其关闭。这很棒。但是,如果您编写了垃圾代码或拥有糟糕的数据结构或过时的统计信息,那么它并没有多大帮助。
Azure 中的自动索引使用两个东西,即缺少来自优化器的索引建议和 Azure 上的机器学习。有了这些,如果缺失的索引在 12-18 小时内大量出现(请阅读这篇关于自动化它的博客文章),您将获得索引建议。它会再测量 12 到 18 小时,如果该指数有帮助,它就会保留,如果没有,它就会消失。这也很棒。然而,它有两个问题。首先,和以前一样,如果你有垃圾代码等,这只会在边缘有真正的帮助。其次,优化器所建议的缺失索引并不总是最佳索引。例如,当我撰写博客文章时,它适本地识别了缺失的索引,但它忽略了这样一个事实:INCLUDE 列会比它建议的索引更好。
人脑和眼球仍然可以解决更困难的问题。这些自动化解决了许多更容易、更容易解决的问题。总的来说,这是一件很棒的事情。但是,不要将它与所有与性能相关的事情的 Elixir 混淆。绝对不是。
关于Azure SQL 数据库自动调整 - 开发时无需担心索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50269008/