摘要
此更新引入了一个新的查询提示参数,使用提示,可让你无需提升的凭据即可驱动查询优化器,或者不是 sysadmin 服务器角色的成员。 此新查询提示的语法类似于以下内容:
<query_hint > ::={USE HINT(N'key' [ [, ]...n ])}
此更新还引入了可与 使用提示 参数一起使用的以下提示选项。
选 |
等效的跟踪标志 |
说明 |
适用于 |
---|---|---|---|
ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS |
TF 9476 |
使 SQL Server 在查询优化程序下使用简单的包容假设(而不是联接的默认基本包容假设)生成查询计划 SQL Server 2014 (12v)或更高版本的基数估计模型。 |
|
ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES |
TF 4137 |
使 SQL Server 在估计和谓词以进行关联时使用最小选择性生成计划。此提示名称将平行于 跟踪标记4137 与 Sql server 2012 (11 x)和早期版本的基数估计模型一起使用时,当跟踪标记9471 与 sql server 2014 (a.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 生成一个计划,该计划不会对包含以下关键字的查询使用行目标修改:
|
|
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 累积更新和服务包中发布的更改)。 使用此提示替代 数据库范围配置 设置 QUERY_OPTIMIZER_HOTFIXES = 启用. |
|
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是受支持的数据库兼容级别。请参阅sys.dm_exec_valid_use_hints ,获取 n 的当前支持值的列表n。 |
在 SQL Server 2017 (CU10)中启动 |
有关详细信息,请参阅 提示(Transact-sql)-Query。
更多信息
此更新包含在 SQL Server 2016 的 Service Pack 1 中。
SQL Server 2016 的每个新版本都包含上一版本中包含的所有修补程序和所有安全修补程序。 我们建议你安装 SQL Server 2016 的最新版本。
在以下情况下,SQL Server 查询优化程序(QO)行为必须是非常常见的,并且传统情况下,它们通过使用多个(有记录的和未记录的)跟踪标记来解决。 但是,当跟踪标志全局设置时,它们可能会对其他工作负荷产生负面影响。 此外,为每个会话启用它们对于现有应用程序并不可行,并且在每个查询中启用选项 QUERYTRACEON需要 sysadmin 固定服务器角色的成员身份。 (虽然你可以使用计划指南或存储过程来解决此问题,但仍需要提升的凭据。)跟踪标记用于临时设置特定的服务器特征或切换特定的行为,它们可能很难管理和理解。有关跟踪标志的信息,请参阅 Microsoft 开发人员网络(MSDN)网站上的跟踪标记(transact-sql) 主题。
参考
了解 Microsoft 用于描述软件更新的 术语。