- 地址:
- 广东省广州市天河区88号
- 邮箱:
- admin@youweb.com
- 手机:
- 13800000000
- 电话:
- 400-123-4657
OPTIMIZE FOR 可以抵消优化器的默认参数检测行为,也可在创建计划指南时使用。有关详细信息,请参阅重新编译存储过程。
OPTIMIZE FOR UNKNOWN指示查询优化器在编译和优化查询时使用所有局部变量的统计数据而不是初始值,包括使用强制参数化创建的参数。
如果在同一查询提示中使用 OPTIMIZE FOR @variable_name =?literal_constant?和 OPTIMIZE FOR UNKNOWN,则查询优化器对特定值使用指定的?literal_constant,而对其余变量值使用 UNKNOWN。?这些值仅用于查询优化期间,而不会用于查询执行期间。
PARAMETERIZATION { SIMPLE | FORCED }指定在编译查询时 SQL Server 查询优化器应用于此查询的参数化规则。
![]() |
---|
PARAMETERIZATION 查询提示只能在计划指南中指定。?不能直接在查询中指定该查询提示。 |
SIMPLE 用于指示查询优化器尝试进行简单参数化。?FORCED 用于指示优化器尝试进行强制参数化。?PARAMETERIZATION 查询提示用于覆盖计划指南中 PARAMETERIZATION 数据库 SET 选项的当前设置。有关详细信息,请参阅使用计划指南指定查询参数化行为。
RECOMPILE指示 SQL Server 数据库引擎在执行为查询生成的计划后将其丢弃,从而在下次执行同一查询时强制查询优化器重新编译查询计划。如果未指定 RECOMPILE,数据库引擎将缓存查询计划并重新使用它们。在编译查询计划时,RECOMPILE 查询提示将使用查询中任意本地变量的当前值,如果查询位于存储过程中,这些当前值将传递给任意参数。
在只须重新编译存储过程中的一部分查询,而不是重新编译整个存储过程时,RECOMPILE 是创建使用 WITH RECOMPILE 子句的存储过程的很有用的替代方法。有关详细信息,请参阅重新编译存储过程。在创建计划指南时,RECOMPILE 也很有用。
ROBUST PLAN强制查询优化器尝试一个计划,该计划可能以性能为代价获得最大可能的行大小。?处理查询时,中间表和运算符可能需要存储和处理比输入行宽的行。?在有些情况下,行可能很宽,以致某个运算符无法处理行。如果发生这种情况,数据库引擎将在查询执行过程中生成错误。通过使用 ROBUST PLAN,可以指示查询优化器不考虑可能会遇到该问题的所有查询计划。
如果不能使用这样的计划,查询优化器将返回错误而不是延迟对查询执行的错误检测。行可以包含可变长度列;数据库引擎允许将行大小定义为超过数据库引擎处理能力的最大可能的大小。通常,应用程序存储实际大小在数据库引擎处理能力范围内的行,而不管最大可能大小。如果数据库引擎遇到过长的行,则返回执行错误。
USE PLAN N ' xml_plan '强制查询优化器对查询使用由?'xml_plan'?指定的现有查询计划。不能使用 INSERT、UPDATE、MERGE 或 DELETE 语句来指定 USE PLAN。
TABLE HINT? ( exposed_object_name?[ ,?<table_hint> [ [ ,?]... n] ] )将指定的表提示应用到与?exposed_object_name?对应的表或视图。我们建议仅在计划指南的上下文中将表提示用作查询提示。
exposed_object_name?可以为以下引用之一:
-
当对查询的?FROM?子句中的表或视图使用别名时,exposed_object_name?就是别名。
-
如果不使用别名,exposed_object_name?与 FROM 子句中引用的表或视图完全匹配。例如,如果使用由两部分组成的名称引用了表或视图,则exposed_object_name?就是这个由两部分组成的名称。
如果指定了?exposed_object_name?但未指定表提示,则将忽略在查询中指定为对象表提示的一部分的任何索引,并由查询优化器来决定索引的使用。当您无法修改原始查询时,可以使用此方法来消除 INDEX 表提示的影响。请参阅示例 J。
<table_hint> ::=?{ [ NOEXPAND ] { INDEX ( ?index_value?[ ,... n] ) | INDEX = ( index_value?) | FORCESEEK [ ( index_value ( index_column_name?[ ,...] ))?]| FORCESCAN | HOLDLOCK | NOLOCK | NOWAIT | PAGLOCK | READCOMMITTED | READCOMMITTEDLOCK | READPAST | READUNCOMMITTED | REPEATABLEREAD | ROWLOCK | SERIALIZABLE |SPATIAL_WINDOW_MAX_CELLS | TABLOCK | TABLOCKX | UPDLOCK | XLOCK }要作为查询提示应用于与?exposed_object_name对应的表或视图的表提示。有关这些提示的说明,请参阅表提示 (Transact-SQL)。
不允许将非 INDEX、FORCESCAN 和 FORCESEEK 的表提示用作查询提示,除非该查询已经具有一个指定该表提示的 WITH 子句。有关详细信息,请参阅备注。
![]() |
---|
指定带参数的 FORCESEEK 限制优化器可以考虑的计划数大于指定不带参数的 FORCESEEK 时的计划数。这可能导致在更多情况下出现“无法生成计划”错误。在未来的版本中,对优化器进行内部修改后可允许考虑更多计划。 |