超级小菜问题。谢谢帮忙

cymandhxl 2008-08-25 12:42:42
同志们好,表的比较有hash,loop,merge三中,在oracle表查询时如何使用这三种比较呢
...全文
92 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
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]

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧