java生成一个矩阵outline_转载一个朋友的关于outline的使用

http://space.itpub.net/756652/viewspace-544642

SQL> variable aa number;

SQL> exec :aa:=90;

PL/SQL 过程已成功完成。

SQL> select * from tt where id=:aa;

ID MC

---------- --------------------

90 1

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT ptimizer=CHOOSE

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TT'

2 1 INDEX (UNIQUE SCAN) OF 'TT_PK' (UNIQUE)

Statistics

----------------------------------------------------------

0 recursive calls

0 db block gets

2 consistent gets

0 physical reads

0 redo size

422 bytes sent via SQL*Net to client

503 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

1 rows processed

SQL> create or replace outline ol1 for category test_ol on

2 select * from tt where id=:aa;

大纲已创建。

SQL> create or replace outline ol2 for category test_ol on

2 select /*+FULL(tt)*/ * from tt where id=:aa;

大纲已创建。

SQL> desc dba_outlines

名称 是否为空? 类型

----------------------------------------- -------- ----------------------------

NAME VARCHAR2(30)

OWNER VARCHAR2(30)

CATEGORY VARCHAR2(30)

USED VARCHAR2(9)

TIMESTAMP DATE

VERSION VARCHAR2(64)

SQL_TEXT LONG

SIGNATURE RAW(16)

SQL> col name for a10

SQL> select name,used from dba_outlines;

NAME USED

---------- ---------

OL1 UNUSED

OL2 UNUSED

SQL> desc dba_outline_hints

名称 是否为空? 类型

----------------------------------------- -------- ----------------------------

NAME VARCHAR2(30)

OWNER VARCHAR2(30)

NODE NUMBER

STAGE NUMBER

JOIN_POS NUMBER

HINT VARCHAR2(512)

SQL> col hint for a20

SQL> col name for a10

SQL> select name,node,stage,join_pos,hint from dba_outline_hints;

NAME NODE STAGE JOIN_POS HINT

---------- ---------- ---------- ---------- --------------------

OL1 1 3 0 NO_EXPAND

OL1 1 3 0 ORDERED

OL1 1 3 0 NO_FACT(TT)

OL1 1 3 1 INDEX(TT TT_PK)

OL1 1 2 0 NOREWRITE

OL1 1 1 0 NOREWRITE

OL1 1 1 0 RULE

OL2 1 3 0 NO_EXPAND

OL2 1 3 0 ORDERED

OL2 1 3 0 NO_FACT(TT)

OL2 1 3 1 FULL(TT)

NAME NODE STAGE JOIN_POS HINT

---------- ---------- ---------- ---------- --------------------

OL2 1 2 0 NOREWRITE

OL2 1 1 0 NOREWRITE

已选择13行。

SQL> update outln.ol$hints

2 set ol_name =decode(ol_name,

3 'OL1','OL2',

4 'OL2','OL1')

5 where ol_name in ('OL1','OL2');

已更新13行。

SQL> update outln.ol$ ol1

2 set hintcount = (select hintcount from outln.ol$ ol2

3 where ol2.ol_name in ('OL1','OL2')

4 and ol2.ol_name != ol1.ol_name)

5 where ol1.ol_name in ('OL1','OL2');

已更新2行。

SQL> COMMIT;

提交完成。

SQL> select name,node,stage,join_pos,hint from dba_outline_hints;

NAME NODE STAGE JOIN_POS HINT

---------- ---------- ---------- ---------- --------------------

OL2 1 3 0 NO_EXPAND

OL2 1 3 0 ORDERED

OL2 1 3 0 NO_FACT(TT)

OL2 1 3 1 INDEX(TT TT_PK)

OL2 1 2 0 NOREWRITE

OL2 1 1 0 NOREWRITE

OL2 1 1 0 RULE

OL1 1 3 0 NO_EXPAND

OL1 1 3 0 ORDERED

OL1 1 3 0 NO_FACT(TT)

OL1 1 3 1 FULL(TT)

NAME NODE STAGE JOIN_POS HINT

---------- ---------- ---------- ---------- --------------------

OL1 1 2 0 NOREWRITE

OL1 1 1 0 NOREWRITE

已选择13行。

SQL> alter session set use_stored_outlines=test_ol;

会话已更改。

SQL> select name,used from dba_outlines;

NAME USED

---------- ---------

OL1 UNUSED

OL2 UNUSED

SQL> select * from tt where id=:aa;

ID MC

---------- --------------------

90 1

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT ptimizer=CHOOSE (Cost=2 Card=1 Bytes=25)

1 0 TABLE ACCESS (FULL) OF 'TT' (Cost=2 Card=1 Bytes=25)

Statistics

----------------------------------------------------------

69 recursive calls

4 db block gets

15 consistent gets

0 physical reads

612 redo size

422 bytes sent via SQL*Net to client

503 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

2 sorts (memory)

0 sorts (disk)

1 rows processed

SQL> select name,used from dba_outlines;

NAME USED

---------- ---------

OL1 USED

OL2 UNUSED

10G以后可以用dbms_outln.CREATE_OUTLINE来创建:

BEGIN

DBMS_OUTLN.create_outline(

hash_value => 921600969,

child_number => 0,

category => 'TEST_OUTLINE');

END;

/

SELECT sql_id,hash_value,outline_category,sql_text FROM v$sqlarea WHERE hash_value=921600969;

参看metalink

Note:604022.1 How To Force A Query To Used Index Hint With Stored Outline

Note:730062.1 How to Edit a Stored Outline to Use the Plan from Another Stored Outline

Note:144194.1 Editing Stored Outlines in Oracle9i - an example[@more@]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值