Aasim Abdullah Asked: 2017-10-19 04:01:47 +0800 CST2017-10-19 04:01:47 +0800 CST 2017-10-19 04:01:47 +0800 CST SQL Server 优化器评估候选计划的时间阈值[重复] 772 在SQL Server 中,是否有任何时间阈值来评估候选计划?优化器确实无法评估所有可能的计划,所以实际上当它决定退出并寻求最佳计划执行时? 如果阈值确实存在,SQL Server 2017 的阈值是否有任何变化? sql-server 1 个回答 Voted Best Answer Mike Walsh 2017-10-19T04:17:10+08:002017-10-19T04:17:10+08:00 据我所知,优化器搜索计划的时间绝对值没有硬性“限制”。 每次执行都预算了一定百分比的时间来探索计划选项。这有很多因素 - 我相信这些因素总是在 SQL Server 版本之间的幕后发生一些变化 - 优化器进行了改进,并且可能会出现一些新的选项或选项方法,计算出的预算可能改变等 SQL Server(谢天谢地)使用一个过程来寻找“足够好的计划”或合理的计划。您的查询越复杂,优化器必须执行您的查询的选择排列数量就越多。所以我们希望它找到一个足够合理的计划并继续前进——这样我们的查询就可以真正开始执行了。重点是“花足够的时间给我一个应该可行的计划,不要花太多时间优化和探索选项” 我们真的无法控制它。我们真的不应该。我们应该查看优化器提出的计划,并更多地关注调整我们的查询、调整我们的设计和调整我们的索引,以最好地满足业务需求。 另一种方式——在大约 15 年的 SQL Server 调优中,我真的从来没有考虑过“该死的,如果优化器再有 4 毫秒的优化就好了”——通常你需要知道的让你的查询更快是正确的在你确实得到的查询计划中,或者探索诸如“串行计划而不是并行计划怎么样?如果我抛出一个连接提示只是为了强制排序并查看优化器做出什么决定以便我可以相应地重写会发生什么?行目标呢?如果我把这个逻辑分开怎么办,等等”
据我所知,优化器搜索计划的时间绝对值没有硬性“限制”。
每次执行都预算了一定百分比的时间来探索计划选项。这有很多因素 - 我相信这些因素总是在 SQL Server 版本之间的幕后发生一些变化 - 优化器进行了改进,并且可能会出现一些新的选项或选项方法,计算出的预算可能改变等
SQL Server(谢天谢地)使用一个过程来寻找“足够好的计划”或合理的计划。您的查询越复杂,优化器必须执行您的查询的选择排列数量就越多。所以我们希望它找到一个足够合理的计划并继续前进——这样我们的查询就可以真正开始执行了。重点是“花足够的时间给我一个应该可行的计划,不要花太多时间优化和探索选项”
我们真的无法控制它。我们真的不应该。我们应该查看优化器提出的计划,并更多地关注调整我们的查询、调整我们的设计和调整我们的索引,以最好地满足业务需求。
另一种方式——在大约 15 年的 SQL Server 调优中,我真的从来没有考虑过“该死的,如果优化器再有 4 毫秒的优化就好了”——通常你需要知道的让你的查询更快是正确的在你确实得到的查询计划中,或者探索诸如“串行计划而不是并行计划怎么样?如果我抛出一个连接提示只是为了强制排序并查看优化器做出什么决定以便我可以相应地重写会发生什么?行目标呢?如果我把这个逻辑分开怎么办,等等”