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