当我们将自动调整设置为 ON 以创建索引时,Azure SQL Hyperscale db 已为我们的一些大型表创建了大约 10 个索引。在分析索引时,其中一些仅在“包含”列中有所不同,而索引列相同。这种索引激增将损害此类表上的 INSERT、UPDATE 操作。
Azure 中是否有合并/优化索引的选项,而不是我们手动删除并重新创建许多表的更好索引?截至目前,关闭自动索引创建似乎是唯一可行的方法。
还有其他建议吗?
当我们将自动调整设置为 ON 以创建索引时,Azure SQL Hyperscale db 已为我们的一些大型表创建了大约 10 个索引。在分析索引时,其中一些仅在“包含”列中有所不同,而索引列相同。这种索引激增将损害此类表上的 INSERT、UPDATE 操作。
Azure 中是否有合并/优化索引的选项,而不是我们手动删除并重新创建许多表的更好索引?截至目前,关闭自动索引创建似乎是唯一可行的方法。
还有其他建议吗?
如果您根本没有任何 DBA(开发人员、系统管理员等),那么此自动索引功能会很有用,DBA 可以通过检查缺失的索引 DMV 并确定如何将建议的索引组合组合成对大多数查询有益的索引来手动维护索引。
不幸的是,该功能目前还不够智能,无法完成“人性化”的工作。它会创建索引,正如您提到的那样,“其中一些仅在‘包含’列上有所不同,而索引列相同”。
如果您觉得它创建的许多索引确实损害了 INSERT 和 UPDATE 操作,或者使用了太多的存储空间,请关闭该功能并手动维护(创建、修改、监控使用情况、删除)索引。
使用此查询来查找使用最多读取的索引:
然后这样找到使用最多写入的索引:
您认为缺少索引吗?使用此查询查找缺少的索引:
不要在数据库中放置随机索引。他们告诉你人工智能可以自动为你做到这一点。但是这个应该找到正确缺失索引的 Azure 功能一直存在。这种人工智能现象很久以前就开始了。请放心,它永远不会帮助你。