由于每一版本的优化器都变得更为完善,Oracle 为更改您的 SQL 执行计划提供了不断增多的方法。Oracle 提示的最常见用处是作为调试工具。您可以使用提示来确定最优的执行计划,然后向回执行,调节统计量,使调整后的 SQL 模拟所提示的查询。
使用 Oracle 提示可能非常复杂,而 Oracle 开发人员只是将提示用作最后的手段,首先应改变统计量来更改执行计划。Oracle 包含 124 种以上的提示,其中许多提示在 Oracle 文档中找不到。(参见列表 1)
让我们快速浏览如何使用提示来改变优化器执行计划:优化器提示是放置在 SQL 语句的注释内的优化器指示,用于那些不常出现的情况,即优化器作出了关于执行计划的不正确决策。由于提示处于注释内,因此确保提示名称拼写正确并确保提示适用于该查询十分重要。
例如,以下提示是无效的,因为 first_rows 访问与并行访问相互排斥。这是因为 parallel 始终假定进行全表扫描,而 first_rows 支持进行索引访问。
-- An invalid hint
select /*+ first_rows parallel(emp,8)*/
emp_name
from
emp
order by
ename;
某些 Oracle 专业人员会将提示集合在一起,以强化他们的期望。例如,如果我们有一台具有八个或更多 CPU 的 SMP 服务器,则我们可能希望使用 Oracle 并行查询来加速合法的全表扫描。在使用并行查询时,我们很少会希望在表一级启用并行机制 (alter table customer parallel 35;),因为表的并行机制设置会影响优化器,导致优化器认为全表扫描的代价并不高。因此,多数 Oracle 专业人员在逐个查询的基础上指定并行查询,将完全提示与 parallel 提示联合使用,以确保快速的并行全表扫描:
-- A valid hint
select /*+ full parallel(emp,35)*/
emp_name
from
emp
order by
ename;
既然我们已经了解了提示的一般性概念,就让我们来观察优化器调整最重要的提示之一。
ordered 提示确定查询执行的驱动表,还指定将表联接在一起的顺序。ordered 提示要求表应该以它们在 from 子句中所指定的顺序进行联接,from 子句中的第一个表指定为驱动表。使用 ordered 提示可以节省大量的分析时间,并加速 SQL 的执行,因为您告诉优化器联接表的最佳顺序。
例如,以下查询使用排序提示,将表以它们在 from 子句中指定的顺序联接起来。在该示例中,我们通过指定 emp 到 dept 的联接使用散列联接,sal 到 bonus 的联接使用嵌套循环联接,进一步改进了执行计划:
select
/*+ ordered use_hash (emp, dept) use_nl (sal, bon) */
from
emp,
dept,
sal,
bon
where . . .
当然,ordered 提示最常用于数据仓库查询或联接超过五个表的 SQL 中。
分享到:
相关推荐
Oracle hint的用法,优化语句效率
介绍了oracle中的hint,常用的 ordered、use_nl、use_hash、index、full 五种, 给出使用实例和适用场景
oracle hint 语句优化hint,拷下来分享下、 在 SQL 语句优化过程中,我们经常会用到 hint,
里面是ORACLE SQL 优化时会用到的hint示例汇总。总共有30个hint。 全部都是hint说明及示例。下面展示一个示例。 /*+noappend*/ 通过在插入语句生存期内停止并行模式来启动常规插入. insert /*+noappend*/ into test...
oracle_hint教程汇总,详细分析各种oracle的hint的用途及用法
Oracle 中HINT的使用
Hint概述(/*+??*/的用法) 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化...此时就需要DBA进行人为的干预,告诉优化器使用我们指定的存取路径或连接类型生成执行计划,从 而使语句高效的运行。
Oracle Hint的用法Oracle Hint的用法Oracle Hint的用法
hint(提示)无疑是最基本的控制执行计划的方式了;通过在SQL语句中直接嵌入优化器指令,进而使优化器在语句执行时强制的选择hint指定的执行路径,这种使用方式最大的好处便是方便和快捷,定制度也很高,通常在对...
js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示js hint 提示
提供的是哦oracle中hint的用法。可以加快查詢速度,按照預設的執行計劃執行
在SQL优化过程中常见HINT的用法(前10个比较常用, 前3个最常用): 1. /*+ INDEX */ 和 /*+ INDEX(TABLE INDEX1, index2) */ 和 /*+ INDEX(tab1.col1 tab2.col2) */ 和 /*+ NO_INDEX */ 和 /*+ NO_INDEX(TABLE INDEX1...
SQL优化过程中常见Oracle中"HINT"的30个用法
在SQL语句优化过程中,经常会用到hint,下面我们来介绍一下在SQL优化过程中常见Oracle中"HINT"的30个用法
Sherryhint.pas从这儿文件改过来的,很简单,有感兴趣的可以看一下…… Delphi 气泡形式的Hint提示(可以修改字体颜色和边框颜色)
其中主要包括收集数据库统计系统、收集列直方图、分析SQL执行计划、如何让CBO优化器选择最优的执行计划,以及如何使用Hint提示认为改变CBO优化器的执行计划等,希望此文档能够帮助大家更深入地理解Oracle优化!
oracle_hint,常用oracle 提示汇总,包括例子,oracle sql语句调优必备。
本篇文章主要介绍了ORACLE中的的HINT详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
它和SF唯一的不同是它支持多个节点同时访问一个文件系 统上面的数据,由SFCFS来进行文件锁管理,而SF中对于文件系统的访问是具有独占性的。SFCFS允许多个节点同时访问的特点就是针对数据库的并行操 作的需求而来的,...