摘要
将新的 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。
有关详细信息,请参阅 2016 SQL Server中的 Update 引入了 USE HINT 查询提示参数。 但是,在复杂查询中识别行目标是否应用以及它对计划选择的影响程度可能很困难。
通过使用 EstimateRowsWithoutRowGoal 属性,可以将结果与 EstimateRows 属性的结果进行比较,以了解行目标对查询优化器估计的影响程度。
注意 如果未将行目标应用于特定的查询计划运算符,则不包括此属性。
详细信息
此更新包含在以下SQL Server累积更新中:
关于SQL Server的累积更新:
SQL Server的每个新累积更新都包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看SQL Server的最新累积更新:
SQL Server的 Service Pack 信息
以下 Service Pack 中引入了此更新,用于SQL Server:
Service Pack 2 for SQL Server 2016
Service Pack 3 for SQL Server 2014
关于SQL Server的 Service Pack:
Service Pack 具有累积性。 每个新 Service Pack 除了包含所有新修复程序外,还包含以前 Service Pack 中的所有修复程序。 建议为该服务包应用最新的 Service Pack 和最新的累积更新。 在安装最新的 Service Pack 之前,不需要安装以前的 Service Pack。 使用以下文章中的表 1 查找有关最新 Service Pack 和最新累积更新的详细信息。
如何确定 SQL Server 及其组件的版本、版本类别和更新级别
参考资料
了解 Microsoft 用于描述软件更新的术语。