Oracle的语句中的提示(5)

USE_HASH(table)

作用:将指定表保存在内存hash表,快速的与其他表连接在一起。

注意:要使用USE_HASH,必须保证HASH_AREA_SIZEPGA_AGGREGATE_TARGET足够大。

例子:

SQL>select /*+use_hash(a)*/ a.f1_num2, b.f3_numnull from t_wei a, t_huang b where a.f1_num2=b.f1_num and a.f1_num2 < 1000 and b.f3_numnull < 10000;

Execution Plan

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

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=13 Card=300 Bytes=11

700)

1 0 HASH JOIN (Cost=13 Card=300 Bytes=11700)

2 1 INDEX (RANGE SCAN) OF 'PK_T_WEI' (UNIQUE) (Cost=2 Card=2

66 Bytes=3458)

3 1 TABLE ACCESS (BY INDEX ROWID) OF 'T_HUANG' (Cost=10 Card

=1323 Bytes=34398)

4 3 INDEX (RANGE SCAN) OF 'PK_T_HUANG' (UNIQUE) (Cost=2 Ca

rd=1)

Statistics

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

0 recursive calls

0 db block gets

81 consistent gets

0 physical reads

0 redo size

13072 bytes sent via SQL*Net to client

1018 bytes received via SQL*Net from client

35 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

496 rows processed

对比:

SQL>select a.f1_num2, b.f3_numnull from t_wei a, t_huang b where a.f1_num2=b.f1_num and a.f1_num2 < 1000 and b.f3_numnull < 10000;

Execution Plan

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

0 SELECT STATEMENT Optimizer=CHOOSE

1 0 NESTED LOOPS

2 1 INDEX (RANGE SCAN) OF 'PK_T_WEI' (UNIQUE)

3 1 TABLE ACCESS (BY INDEX ROWID) OF 'T_HUANG'

4 3 INDEX (UNIQUE SCAN) OF 'PK_T_HUANG' (UNIQUE)

Statistics

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

0 recursive calls

0 db block gets

3069 consistent gets

0 physical reads

0 redo size

13072 bytes sent via SQL*Net to client

1018 bytes received via SQL*Net from client

35 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

496 rows processed

PUSH_SUBQ

作用:可以尽可能早的评估子查询。当子查询返回比较少行时,这个提示比较有用。

注意:当查询使用合并连接和远程表连接时,这个提示无效。

例子:

SQL>select /*+push_subq*/ * from t_huang where f2_char < ‘1000’ and f1_num in (select f1_num2 from t_wei where f2_char2 < ‘1’);

Execution Plan

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

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=21 Card=1331 Bytes=1

17128)

1 0 HASH JOIN (Cost=21 Card=1331 Bytes=117128)

2 1 TABLE ACCESS (BY INDEX ROWID) OF 'T_WEI' (Cost=10 Card=2

66 Bytes=6650)

3 2 INDEX (RANGE SCAN) OF 'IX_WEI_F234_CHAR' (NON-UNIQUE)

(Cost=2 Card=1)

4 1 TABLE ACCESS (BY INDEX ROWID) OF 'T_HUANG' (Cost=10 Card

=26464 Bytes=1667232)

5 4 INDEX (RANGE SCAN) OF 'IX_HUANG_F23_CHAR' (NON-UNIQUE) (Cost=2 Card=4764)

Statistics

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

0 recursive calls

0 db block gets

508038 consistent gets

33 physical reads

2044 redo size

136343 bytes sent via SQL*Net to client

2470 bytes received via SQL*Net from client

167 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

2482 rows processed

对比:

SQL>select * from t_huang where f2_char < ‘1000’ and f1_num in (select f1_num2 from t_wei where f2_char2 < ‘1’);

Execution Plan

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

0 SELECT STATEMENT Optimizer=CHOOSE

1 0 NESTED LOOPS

2 1 TABLE ACCESS (BY INDEX ROWID) OF 'T_HUANG'

3 2 INDEX (RANGE SCAN) OF 'IX_HUANG_F23_CHAR' (NON-UNIQUE)

4 1 TABLE ACCESS (BY INDEX ROWID) OF 'T_WEI'

5 4 INDEX (UNIQUE SCAN) OF 'PK_T_WEI' (UNIQUE)

Statistics

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

0 recursive calls

0 db block gets

1008640 consistent gets

0 physical reads

0 redo size

136343 bytes sent via SQL*Net to client

2470 bytes received via SQL*Net from client

167 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

2482 rows processed

PARALLEL(table[, degree[, instances]])

作用:将全表扫描的查询分成多个部分,在不同进程中处理。

注意:该提示只对分区表有效。该提示对deleteupdateinsert同样有效

例子:略

NOPARALLEL(table)

作用:指定不使用并行查询。

注意:该提示只对分区表有效

例子:略

APPEND

作用:不检查是否有插入所需要的足够空间,直接添加到新块中。

注意:使用该提示必须保证有足够的空间

提示: 在insert中使用parallel提示默认会使用append

例子:略

NOAPPEND

作用:指定不使用append方式。当使用parallel提示时,会默认使用append,可以使用该提示使append无效

例子:略

CACHE(table)

作用:对指定进行全表扫描的表固定到内存中。对于经常要查询的小表可以使用CACHE提示。

提示: 在建表时使用cache子句,可以直接将表中数据存入内存

alter table t_wei cache;

例子:略

NOCACHE(table)

作用:对与已经指定CACHE将数据固定到内存中表,可以用NOCACHE从内存移出。

例子:略

CLUSTER

作用:强制使用聚簇扫描访问表。如果经常访问连接表,但又很少修改它,可以使用聚簇表。

例子:略

HASH(table)

作用:强制使用HASH聚簇。

注意:只有基于代价的优化器规则才能使用HASH聚簇。并且HASH_JOIN_ENABLED要为TRUE,PGAA_GGREGATE_TARGET、HASH_AREA_SIZE要足够大。

例子:略

CURSOR_SHAREING_EXACT

作用:强制使参数CURSOR_SHARINGFORCESIMILAR

例子:略

RICHS_SECRET_HINT

作用:强制只访问内存中的数据。对于不使用索引的全表扫描有效。

例子:略

[@more@]

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

转载于:http://blog.itpub.net/9650775/viewspace-920366/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值