SQL hint中的ORDER与Leading(zt)

关于LEADING、ORDERED:
    /*+ORDERED*/提示按照from后表的顺序执行。
    /*+LEADING(table1 table2 ...)*/提示按照指定顺序执行。

通常在中出现了join的时候,可能需要用到这两个hint,会比较有用。这里引用下在Taobao DBA Team上看到的一个例子:

SQL> select *
  2    from table_detail t,
  3    table(cast(str2varlist('123') as vartabletype)) t2
  4   where t.id = t2.column_value;

Execution Plan
----------------------------------------------------------
Plan hash value: 31598426
----------------------------------------------------------
 Operation   | Name   |Rows |Bytes|Cost(%CPU)|Time|
----------------------------------------------------------
SELECT STATEMENT   |      |784K|124M|2132(1)|00:00:26|
 NESTED LOOPS      |      |784K|124M|2132(1)|00:00:26|
  TABLE ACCESS FULL | table_detail|96 |15744| 11(0)|00:00:01|
  COLLECTION ITERATOR PICKLER FETCH| STR2VARLIST |   |  |  | |
-------------------------------------------------------------

t2是个虚拟的表,没有准确的统计信息,很容易出现执行计划错误,这种sql最好要用hint来固化其执行计划。

使用/*+ ORDERED use_nl(t,t2) */提示。

SQL>  select /*+ ORDERED use_nl(t2,t) */*
  2    from table(cast(str2varlist('123') as vartabletype)) t2,
  3         table_detail t
  4   where t.id = t2.column_value;

Execution Plan
----------------------------------------------------------
Plan hash value: 2272521841

-------------------------------------------------------------------------------
 Operation                          | Name       Rows |Bytes |Cost (%CPU)|Time|
-------------------------------------------------- ----------------------------
SELECT STATEMENT                    |              |784K| 124M|25 (0)|00:00:01|
 TABLE ACCESS BY INDEX ROWID        | table_detail | 96 |15744| 1 (0)|00:00:01|
  NESTED LOOPS                      |              |784K| 124M|25 (0)|00:00:01|
   COLLECTION ITERATOR PICKLER FETCH| STR2VARLIST  |    |     |      |        |
   INDEX RANGE SCAN                 | IND_deail_id |  1 |     | 1 (0)|00:00:01|
-------------------------------------------------- ----------------------------
使用leading提示来指定驱动表
SQL> select /*+ leading(t2) use_nl(t) */*
  2    from table_detail t,
  3    table(cast(str2varlist('123') as vartabletype)) t2
  4   where t.id = t2.column_value;

Execution Plan
----------------------------------------------------------
Plan hash value: 2272521841
-------------------------------------------------------------------------------
 Operation                          | Name       Rows |Bytes |Cost (%CPU)|Time|
-------------------------------------------------- ----------------------------
SELECT STATEMENT                    |              |784K| 124M|25 (0)|00:00:01|
 TABLE ACCESS BY INDEX ROWID        | table_detail | 96 |15744| 1 (0)|00:00:01|
  NESTED LOOPS                      |              |784K| 124M|25 (0)|00:00:01|
   COLLECTION ITERATOR PICKLER FETCH| STR2VARLIST  |    |     |      |        |
   INDEX RANGE SCAN                 | IND_deail_id |  1 |     | 1 (0)|00:00:01|
 

跟踪对应的session,客户提供对应session sid877

SQL>select sid,serial# from v$session where sid=877;

SQL>exec sys.dbms_system.set_sql_trace_in_session(877,1687,true);

生成trace文件scjfzw1_ora_18741.trc 针对该trace文件进行分析,

$tkprof scjfzw1_ora_18741.trc scjfzw1_ora_18741.txt

 

查看执行计划也可以用:

SQL> set lines 200

SQL> set pages 80

SQL> @?/rdbms/admin/utlxpls
 

SQL> explain plan for
SQL> set lines 200 pages 80
SQL> spool
SQL> select * from table(dbms_xplan.display);

 

 

explain plan set statement_id='jzmu' for select * from a;

select * from table(dbms_xplan.display(null,'jzmu',null));
SQL> spool off

 

通过sql_id,查看某一个特定sql的执行计划

SQL>select * from TABLE(dbms_xplan.display_cursor('&SQL_ID'));

SQL>select * from table(dbms_xplan.display_awr('9z6ntpr77n81a'));

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/730796/viewspace-580368/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/730796/viewspace-580368/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值