SQL.PLSQL
2006-02-25
如何使用ordered提示改变SQL执行计划
ORDERED提示强制Oracle按照From子句中表出现的顺序进行表连接。
通过ordered提示,可以避免CBO SQL解析过程中的表连接评估,从而避免Oracle产生错误的执行计划,或者强制Oracle按照我们指定的方式执行。
在很多时候,当我们清楚地了解数据结构和数据分布之后,就可以通过ORDERED提示来提高SQL性能。
通过以下例子我们来说明一下Ordered提示的作用.
1.不加Hints时SQL的执行计划
SQL> set autotrace trace explain Execution Plan |
我们可以通过10053事件跟踪一下该SQL的解析:
SQL> alter session set events='10053 trace name context forever,level 1'; Session altered. SQL> explain plan for Explained. |
查看Trace文件可以看到,Oracle需要进行3! (6)次表连接顺序的评估:
bash-2.03$ cat testora9_ora_10862.trc |grep "Join order" |
2.当我们使用Ordered提示之后
SQL的执行计划如下(from子句后的表顺序作了调整):
SQL> SELECT /*+ ordered */ COUNT (*) Execution Plan |
再看10053的跟踪Trace文件:
bash-2.03$ grep "Join order" testora9_ora_10918.trc |
Oracle只需要按照表在From子句中的出现顺序进行连接,从而按照我们的意图进行解析或执行.
这就是Ordered提示的基本作用,本例只是一个示范说明,后者的执行计划使得Cost激增,在实际应用中,我们当然是不希望看到此类增长的.
历史上的今天
- 2011-02-25 DBA手记:从10g到12c,JOB的问题auto_space_advisor_job_proc
- 2008-02-25 Oracle10g 10.2.0.4 PatchSet发布
- 2005-02-25 B*Tree索引能有多高?--推荐Jonathan Lewis 的一篇经典文章
- 2005-02-25 感谢我的朋友们-在Itpub上写下的一段话