摘要
此更新引入了一个新的查询提示参数 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 生成不使用包含以下关键字的查询的行目标修改的计划:
|
|
| 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 用于描述软件更新的术语。