高分请教这个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去掉也可以得出数据。
请问该如何解决这个问题?
...全文
305 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
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 情况都贴上来。

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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