19.3.3提示报告
一份已解释的计划包括一份报告,该报告显示在计划生成过程中使用了哪些提示。
本节包含以下主题:
- 提示使用情况报告的目的 : 在Oracle Database 19c之前的发行版中,可能很难确定为什么优化器不使用提示。提示使用情况报告解决了此问题。
- 提示使用情况报告 : 的用户界面该报告包含所有优化程序提示的状态。其他提示的子集,包括
PARALLEL和INMEMORY,也包括在内。 - 报告提示使用情况:教程 您可以使用
DBMS_XPLAN显示功能报告提示使用情况。 - 提示使用情况报告:示例 这些示例显示了各种类型的提示使用情况报告。
19.3.3.1提示使用情况报告的目的
在Oracle Database 19c之前的版本中,可能很难确定优化器为何不使用提示。提示使用情况报告解决了此问题。
优化程序使用提示中编码的指令为语句选择执行计划,除非条件阻止优化程序使用提示。数据库不会针对其忽略的提示发出错误消息。提示报告显示使用和忽略了哪些提示,并通常说明了为什么忽略了提示。忽略提示的最常见原因如下:
- 语法错误
提示可以包含错字或无效的参数。如果多个提示出现在同一个提示块中,并且一个提示存在语法错误,则优化器将在提示之前对所有提示进行错误提示,并忽略之后出现的提示。例如,在提示规范中
/*+ INDEX(t1) FULL(t2) MERG(v) USE_NL(t2) */,MERG(v)存在语法错误。优化程序尊重INDEX(t1)和FULL(t2),但忽略MERG(v)和USE_NL(t2)。提示使用情况报告列出MERG(v)有错误,但未列出,USE_NL(t2)因为未对其进行分析。 - 未解决的提示
由于语法错误以外的原因,未解决的提示无效。例如,一条语句指定
INDEX(employees emp_idx),其中emp_idx不是table的有效索引名称employees。 - 冲突的提示
即使正确指定了这些提示,数据库也会忽略冲突提示的组合。例如,一条语句指定
FULL(employees) INDEX(employees),但是索引扫描和全表扫描是互斥的。在大多数情况下,优化器会忽略两个冲突的提示。 - 受转换影响的提示
转换会使某些提示无效。例如,一条语句指定
PUSH_PRED(some_view) MERGE(some_view)。当some_view合并到其包含的查询块中时,PUSH_PRED由于some_view不可用,优化器无法应用提示。
也可以看看:
Oracle数据库SQL语言参考,以了解注释和提示的语法规则




