Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6302
  • 博文数量: 8
  • 博客积分: 360
  • 博客等级: 一等列兵
  • 技术积分: 100
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-12 17:04
文章分类

全部博文(8)

文章存档

2010年(8)

我的朋友
最近访客

分类:

2010-05-12 21:00:14

作者:

来源:

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

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

例子:略

阅读(263) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~