可以将优化程序提示与SQL语句一起使用来更改执行计划。本章介绍如何使用提示指示优化器使用特定方法。
本章包含以下部分:
■优化程序提示概述
■指定提示
■使用带有视图的提示
优化程序提示概述
提示是对优化器的指令。编写SQL时,您可能知道有关优化程序未知的数据的信息。提示使您可以通常由优化程序做出决策,有时会导致优化程序选择它认为成本较高的计划。
在测试或开发环境中,提示对于测试特定访问路径的性能很有用。例如,您可能知道某个索引对某些查询更具选择性。在这种情况下,您可以使用提示来指示优化程序使用更好的执行计划。
提示的缺点是必须管理,检查和控制的额外代码。数据库和主机环境的变化可能会使提示过时甚至产生负面后果。出于这个原因,通过提示进行测试,但使用其他技术来管理SQL执行计划,例如SQL Tuning顾问程序和SQL计划基准。
Oracle数据库支持60多个提示,每个提示可能包含零个或多个参数。语句块只能有一个包含提示的注释,并且该注释必须遵循SELECT,UPDATE,INSERT,MERGE或DELETE关键字。例如,以下提示指示优化器选择以最低成本从employees表生成前10行的查询计划:
SELECT /*+ FIRST_ROWS(10) */ * FROM employees;
提示类型
提示可以是以下一般类型:
■单表
在一个表或视图上指定单表提示。 INDEX和USE_NL是单表提示的示例。
■多表
多表提示类似于单表提示,但提示可以指定一个或多个表或视图。 LEADING是多表提示的示例。请注意,USE_NL(table1 table2)不被视为多表提示,因为它是USE_NL(table1)和USE_NL(table2)的快捷方式。
■查询块
查询块提示对单个查询块进行操作。 STAR_TRANSFORMATION和UNNEST是查询块提示的示例。
■声明
语句提示适用于整个SQL语句。 ALL_ROWS是语句提示的示例。
按类别提示
优化程序提示分为以下类别:
■优化方法和目标的提示 Hints for Optimization Approaches and Goals
■启用优化程序功能的提示 Hints for Enabling Optimizer Features
■访问路径的提示 Hints for Access Paths
■加入订单的提示 Hints for Join Orders
■联接操作的提示 Hints for Join Operations
■在线应用程序升级的提示 Hints for Online Application Upgrade
■并行执行的提示 Hints for Parallel Execution
■查询转换的提示 Hints for Query Transformations
■其他提示 Additional Hints
这些类别以及每个类别中包含的提示将在后面的部分中列出。