KB3189813 - 更新在 SQL Server 2016 中引入了 USE HINT 查询提示参数

应用对象
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Express - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Web - duplicate (do not use)

摘要

此更新引入了一个新的查询提示参数 USE HINT,它使你无需提升的凭据或成为系统管理员服务器角色的成员即可驱动查询优化器。 此新查询提示的语法类似于以下内容:

<query_hint > ::=
{
USE HINT(N'key' [ [, ]...n ])
}

      

此更新还引入了以下可与 USE HINT 参数结合使用的提示选项。

选项 等效跟踪标志 说明 适用范围
ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS TF 9476 导致SQL Server在查询优化器 (12.x) 或更高版本的 SQL Server 2014 的基数估计模型下,使用简单包含假设而不是默认的联接基本包含假设生成查询计划。
ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES TF 4137 导致 SQL Server 在估计筛选器的 AND 谓词时使用最小选择性生成计划以考虑相关性。 当与 SQL Server 2012 (11.x) 及更早版本的基数估计模型一起使用时,此提示名称与跟踪标志 4137 并行;当跟踪标志 9471 与 SQL Server 2014 (12.x) 或更高版本的基数估计模型一起使用时,具有类似的效果。
DISABLE_BATCH_MODE_ADAPTIVE_JOINS 禁用批处理模式自适应联接。 从 SQL Server 2017 开始
DISABLE_BATCH_MODE_MEMORY_GRANT_FEEDBACK 禁用批处理模式内存授予反馈。 从 SQL Server 2017 开始
DISABLE_DEFERRED_COMPILATION_TV 禁用表变量延迟编译。 从 SQL Server 2019 开始
DISABLE_INTERLEAVED_EXECUTION_TVF 禁用多语句表值函数的交错执行。 从 SQL Server 2017 开始
DISABLE_OPTIMIZED_NESTED_LOOP TF 2340 指示查询处理器在生成查询计划时不要使用排序操作 (批处理排序) 来优化嵌套循环联接。
DISABLE_OPTIMIZER_ROWGOAL TF 4138 导致 SQL Server 生成不使用包含以下关键字的查询的行目标修改的计划:

  • TOP
  • 选项 (快速 N)
  • IN
  • EXISTS
DISABLE_PARAMETER_SNIFFING TF 4136 指示查询优化器在编译具有一个或多个参数的查询时使用平均数据分布。 此指令使查询计划独立于编译查询时首次使用的参数值。 使用此提示重写数据库范围的配置设置 PARAMETER_SNIFFING=OFF。
DISABLE_ROW_MODE_MEMORY_GRANT_FEEDBACK 禁用行模式内存授予反馈。 从 SQL Server 2019 开始
DISABLE_TSQL_SCALAR_UDF_INLINING 禁用标量 UDF 内联。 从 SQL Server 2019 开始
DISALLOW_BATCH_MODE 禁用批处理模式执行。 从 SQL Server 2019 开始
ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS TF 4139 为需要基数估计的任何前导索引列启用自动生成的快速统计信息 (直方图修正) 。 用于估计基数的直方图将在查询编译时进行调整,以考虑此列的实际最大值或最小值。
ENABLE_QUERY_OPTIMIZER_HOTFIXES TF 4199 启用查询优化器修补程序 (SQL Server累积汇报和 Service Pack) 中发布的更改。 使用此提示替代数据库范围的配置设置 QUERY_OPTIMIZER_HOTFIXES=ON。
FORCE_DEFAULT_CARDINALITY_ESTIMATION TF 9481 强制查询优化器使用与当前数据库兼容性级别对应的基数估计模型。 使用此提示替代数据库范围的配置设置 LEGACY_CARDINALITY_ESTIMATION=ON。
FORCE_LEGACY_CARDINALITY_ESTIMATION TF 9481 强制查询优化器使用 SQL Server 2012 (11.x) 及更早版本的基数估计模型。 使用此提示替代数据库范围的配置设置 LEGACY_CARDINALITY_ESTIMATION=ON。
QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n 在查询级别强制执行查询优化器行为。 此行为就像查询是使用数据库兼容性级别 n 编译的一样,其中 n 是受支持的数据库兼容性级别。 有关 n 当前支持的值列表,请参阅 sys.dm_exec_valid_use_hints。 从 SQL Server 2017 (14.x) CU10 开始

有关详细信息,请参阅 Transact-SQL) - 查询 ( 提示。

详细信息

此更新包含在 SQL Server 2016 Service Pack 1 中。

关于 SQL Server 2016 内部版本

SQL Server 2016 的每个新内部版本都包含先前内部版本中包含的所有修补程序和所有安全修补程序。 建议安装 SQL Server 2016 的最新版本。

必须提示查询优化器 (QO) 行为SQL Server情况相当常见,传统上,通过使用多个 (记录的和未记录的) 跟踪标志来解决这些问题。 但是,当全局设置跟踪标志时,它们可能会对其他工作负载产生不利影响。 此外,对于现有应用程序,每个会话启用它们并不实用,并且使用 OPTION QUERYTRACEON 按查询启用它们需要 sysadmin 固定服务器角色的成员身份。 (虽然可以使用计划指南或存储过程来解决此行为,但仍需要提升的凭据。)

跟踪标志用于临时设置特定的服务器特征或关闭特定行为,它们可能难以管理和理解。

有关跟踪标志的信息,请参阅 Microsoft Developer Network (MSDN) 网站上的“ Transact-SQL) (跟踪标志 ”主题。

参考资料

了解 Microsoft 用于描述软件更新的术语。