对于复杂查询,我如何增加 SQL Server 搜索最佳执行计划的时间

SQL*_*IKE 1 sql-server execution-plan timeout

我们的系统通过大量测试生成 SQL。我怀疑在某些情况下,找到理想的执行计划需要很长时间。所以 SQL 只选择它迄今为止找到的最好的计划,然后需要很长时间才能运行。是否可以增加 SQL 搜索最佳计划的时间?

Jos*_*ell 6

有一些未记录的跟踪标志允许增加或删除优化器在确定是否找到“足够好”的计划时使用的一些限制。

但是,我所见过的所有结果都表明,使用这些标志时计划质量仅得到最低限度的改善,如果有的话。 存在超时和限制是有充分理由的。您几乎肯定最好以某种方式将这些查询分成更小的块(来自 Erik Darling 的关于该主题的精彩 YouTube 视频),以使优化器更易于管理以进行选择。

此外,这些跟踪标志是未记录的。因此,如果您确实使用此方法找到了更好的计划(在测试系统上!),您应该尝试使用传统方法获得该计划,例如:

  • 重写查询,
  • 添加记录的查询或索引提示,
  • 添加/调整索引,
  • 必要时使用计划指南

我知道的跟踪标志可以在查询级别启用,如下所示:

/* your query here */
OPTION
(
    QUERYTRACEON 8780,
    QUERYTRACEON 8671
)
Run Code Online (Sandbox Code Playgroud)

参考: