我读到只有Trivial Plans 可以是 Simple Parameterized,并且并非所有查询(即使计划是 Trivial )都可以是 Simple Parameterized。
那为什么这个计划同时显示Full Optimization和Simple Parameterization?
我读到只有Trivial Plans 可以是 Simple Parameterized,并且并非所有查询(即使计划是 Trivial )都可以是 Simple Parameterized。
那为什么这个计划同时显示Full Optimization和Simple Parameterization?
当找到一个微不足道的计划时,将尝试简单参数化。参数化尝试可能被认为是安全的或不安全的。
关键是找到一个琐碎的计划并认为它是安全的。如果普通计划的成本超过
cost threshold for parallelism
,优化器将继续优化的后期阶段,可能会考虑并行计划。无论最终结果是串行还是并行计划,如果找到(但未最终使用)的安全琐碎计划被参数化,它将被简单参数化。在问题示例中,设置
cost threshold for parallelism
高于琐碎计划的成本将允许优化器在该阶段停止。查看查询计划并不总是足以弄清楚您的查询是否实际上是简单参数化的。
最安全的方法是检查一些 DMV 以验证:
此外,您还可以使用未记录的跟踪标志 8607,但不能用作
OPTION
子句提示。使用该OPTION
子句可以防止琐碎的计划。如果该计划被认为对于简单参数化是安全的,您将在此处看到一条确认消息。