摘要
将新的 EstimateRowsWithoutRowGoal 查询执行计划属性添加到 SQL Server 2017 累积更新3(CU3)和 Microsoft SQL Server 2016 Service Pack 2 (SP2)。
当查询优化器估计查询执行计划的开销时,它通常假设必须处理来自所有源的所有符合条件的行。 但是,某些查询会使查询优化器搜索将更快地返回较少行数的计划。 如果查询使用TOP子句、 FAST number_rows查询提示、 IN或EXISTS子句,或者设置的行数 {number | @number_var}语句,则可能会发生这种情况。 在这种情况下,优化程序在估计查询计划时使用行目标。 如果应用了 "行目标计划",则减少查询执行计划中的估计行数。 这是因为计划假设必须处理较少数量的行才能达到行目标。
注意 使用行目标进行的估计值为近似值。 如果实际数据分布是非统一的,则它可能小于必须处理的实际行数。 因此,它可能会创建效率低下的查询计划。 为解决此问题,你可以使用 "使用提示" ("DISABLE_OPTIMIZER_ROWGOAL") 查询选项或跟踪标记4138。
有关详细信息,请参阅 SQL Server 2016 中的 "更新引入使用提示查询提示" 参数。 但是,在复杂查询中发现行目标是否已应用以及影响计划选择的程度可能很有挑战性。
通过使用 EstimateRowsWithoutRowGoal属性,你可以将结果与 EstimateRows 属性的结果进行比较,以查看行目标对查询优化程序估计值有多少影响。
注意 如果行目标未应用于特定查询计划运算符,则不包含此属性。
更多信息
此更新包含在 SQL Server 的以下累积更新中:
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
SQL Server 的 Service pack 信息
此更新在 SQL Server 的以下 service pack 中引入:
Service Pack 具有累积性。 每个新 Service Pack 除了包含所有新修复程序外,还包含以前 Service Pack 中的所有修复程序。 我们建议为该服务包应用最新的服务包和最新的累积更新。 在安装最新的 Service Pack 之前,不需要安装以前的 Service Pack。 使用以下文章中的表1查找有关最新服务包和最新累积更新的详细信息。
参考
了解 Microsoft 用于描述软件更新的 术语。