• 全部
  • Oracle 基础和管理
  • Oracle 高级技术
  • Oracle 认证与考试
  • 职位交流
  • 问答

高分请教这个SQL语句为什么会运行很久?

lovebelobe 2015-10-14 06:00:32
先给大大们磕头!!
select 
H.RENO,
B.NAME,
H.RBNO,
H.ENO,
A.NAME,
H.BNO
from
HTABLE H
join
NAMETABLE A
on
(A.NUM = 2 and
H.ENO = A.ENO and
H.RENO <> A.ENO)
join
NAMETABLE B
ON
(H.RENO = B.ENO)
ORDER BY
H.RENO,
H.RBNO

执行上面的SQL语句之后就一直在运行,得不出结果。
表NAMETABLE里面有2万条符合“NUM = 2”的记录。但是如果NAMETABLE里的记录减少到300条的话就可以查询出数据。或者把A.NUM = 2去掉也可以得出数据。
请问该如何解决这个问题?
...全文
246 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lovebelobe 2015-10-17
谢谢各位大大的热心回答!
H表中有3000条记录,A,B表有20000条记录。
FROM的表顺序是H,A,B时,B表是驱动表,卡住。
当FROM的表顺序改为A,B,H之后,H表是驱动表,能够正常运行。
执行计划我记不太清楚了,希望上面的信息可以有点用……
回复
lovebelobe 2015-10-17
引用 4 楼 wmxcn2000 的回复:
[quote=引用 2 楼 lovebelobe 的回复:] [quote=引用 1 楼 wmxcn2000 的回复:] 先把 order by 去掉,看看什么情况 建议把 建表语句和 IX 情况都贴上来。
请问IX 情况是什么?[/quote] 就是创表语句和 IX (索引) 的语句,都列出来,这样分析起来就容易一些了。[/quote] HTABLE表有一个索引是RENO,NAMETABLE表没有索引。 这样看来是不是NAMETABLE表是驱动表,H表是内部表?
回复
生命沉思者 2015-10-16
问这个要把执行计划贴出来
回复
美到心痛 2015-10-16
提供数据量,表上的索引,语句执行计划会方便问题的诊断. 如果不是把语句优化到最优,只要出结果就行.根据你说的把A.NUM = 2去掉也可以得出数据,也就是说数据量大都可以得出数据, 说明目前语句的执行计划有问题,可尝试先重新收集一个表上的统计信息.
回复
qiankunbobo 2015-10-15
H.ENO,H.RENO,A.ENO,B.ENO 是否建了索引
回复
卖水果的net 2015-10-15
引用 2 楼 lovebelobe 的回复:
[quote=引用 1 楼 wmxcn2000 的回复:] 先把 order by 去掉,看看什么情况 建议把 建表语句和 IX 情况都贴上来。
请问IX 情况是什么?[/quote] 就是创表语句和 IX (索引) 的语句,都列出来,这样分析起来就容易一些了。
回复
小灰狼W 2015-10-15
先给出执行计划吧 还有数据量和结果集大概是什么情况
回复
beyon2008 2015-10-15
对nametable表的num字段建个索引看看
回复
lovebelobe 2015-10-14
引用 1 楼 wmxcn2000 的回复:
先把 order by 去掉,看看什么情况 建议把 建表语句和 IX 情况都贴上来。
请问IX 情况是什么?
回复
卖水果的net 2015-10-14
先把 order by 去掉,看看什么情况 建议把 建表语句和 IX 情况都贴上来。
回复
相关推荐
发帖
Oracle
创建于2007-09-28

1.6w+

社区成员

Oracle开发相关技术讨论
申请成为版主
帖子事件
创建了帖子
2015-10-14 06:00
社区公告
暂无公告