oracle的一个奇怪的sql执行计划

wct64006106 2012-09-13 08:47:14
今天调测一个存储过程的时候发现一个sql神奇的吃掉了12G的临时表空间,最后还报临时表空间不足.
这个sql是一个3表关联的sql,表结构如下:
a (key number, a number)
b (key number, b number)
c (key number, c number)
a表有30W数据,b表有30W数据,c表只有2条记录
3个表都可以通过key字段关联,sql写成如下的时候出现了这种情况.
select /* + parallel(a,4) parallel(c,4) parallel(c,4) use_hash(a,b,c) */ a.key,b.b,b.c from a,b,c where a.key=b.key and c.key=b.key
查看执行计划后发现,a和b表走的是meger关联,而不是期待的hash关联.
在将sql调整为select /* + parallel(a,4) parallel(c,4) parallel(c,4) use_hash(a,b,c) */ a.key,b.b,b.c from a,b,c where a.key=b.key and c.key=b.key and b.key=c.key之后发现3个表都是使用了hash关联.这里我对oracle的解析就无法理解.
之后发生了一个更诡异的情况,当我把第一个sql复制到另外一台服务器在查看执行计划的时候发现这次居然没有在走merge的关联,而是用的hash关联,这让我对CBO的理解就更乱了,求大神帮忙分析下这个...
...全文
135 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
软件钢琴师 2012-09-25
  • 打赏
  • 举报
回复
两台服务器上安装的 oracle都是一样的版本么?

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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