超级小菜问题。谢谢帮忙

cymandhxl 2008-08-25 12:42:42
同志们好,表的比较有hash,loop,merge三中,在oracle表查询时如何使用这三种比较呢
...全文
40 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hebo2005 2008-08-25
一般来说,系统会自动选择哪种方式的,现在用的ORACLE基本上都是用CBO
你也可以用HINT来指定


22. /*+USE_NL(TABLE)*/
  将指定表与嵌套的连接的行源进行连接,并把指定表作为内部表.
  例如:
  SELECT /*+ORDERED USE_NL(BSEMPMS)*/ BSDPTMS.DPT_NO,BSEMPMS.EMP_NO,BSEMPMS.EMP_NAM FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
  23. /*+USE_MERGE(TABLE)*/
  将指定的表与其他行源通过合并排序连接方式连接起来.
  例如:
  SELECT /*+USE_MERGE(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
  24. /*+USE_HASH(TABLE)*/
  将指定的表与其他行源通过哈希连接方式连接起来.
  例如:
  SELECT /*+USE_HASH(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
回复
oracledbalgtu 2008-08-25
use_merge(tableName ...) --将提示的表以排序合并连接的方式连接到结果集。即先在每个表中查询所有符合条件的记录并排序,然后合并各个表,适用于大吞吐量。尤其适合大表存在cola>常数的情况。
use_nl(tableName ...) --嵌套循环连接方式,适用快速返回第一行和返回很小的结果集。首先根据其它表上的结果查找这个表上的第一个匹配的行
use_hash(tableName...) --类似于use_nl方式,但区别是,use_hash会把被遍历(指定)的表放在内存中,所以需要有足够内存,且hash_area_size或者pga_aggregate_target要设置的足够大,否则将导致操作在磁盘上进行,影响性能。可以为较大的结果集提供最佳响应时间。因为它找到匹配行后就返回,不会象use_merge那样等到找到所有行才返回。有时优化器会改写use_hash提示为use_nl


[Quote=引用楼主 cymandhxl 的帖子:]
同志们好,表的比较有hash,loop,merge三中,在oracle表查询时如何使用这三种比较呢
[/Quote]
回复
相关推荐
发帖
基础和管理
创建于2007-09-28

1.7w+

社区成员

Oracle 基础和管理
申请成为版主
帖子事件
创建了帖子
2008-08-25 12:42
社区公告
暂无公告