HelloDBA [English]
搜索Internet 搜索 HelloDBABA
  Oracle技术站。email: fuyuncat@gmail.com  MSN: fuyuncat@hotmail.com   acoug  acoug 

Oracle的语句中的提示(5)

[English]

作者: fuyuncat

来源: www.HelloDBA.com

日期: 2006-07-07 14:50:00

分享到  新浪微博 腾讯微博 人人网 i贴吧 开心网 豆瓣 淘宝 推特 Facebook GMail Blogger Orkut Google Bookmarks

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

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

例子:略

 

Top

Copyright ©2005,HelloDBA.Com 保留一切权利

申明
by fuyuncat