当前位置: 代码迷 >> Oracle开发 >> 高分请问这个SQL语句为什么会运行很久
  详细解决方案

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

热度:242   发布时间:2016-04-24 06:23:39.0
高分请教这个SQL语句为什么会运行很久?
本帖最后由 lovebelobe 于 2015-10-14 19:23:57 编辑
先给大大们磕头!!
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去掉也可以得出数据。
请问该如何解决这个问题?
------解决思路----------------------
先把 order by 去掉,看看什么情况

建议把 建表语句和 IX 情况都贴上来。
------解决思路----------------------
先给出执行计划吧
还有数据量和结果集大概是什么情况
------解决思路----------------------
H.ENO,H.RENO,A.ENO,B.ENO 是否建了索引

------解决思路----------------------
对nametable表的num字段建个索引看看
------解决思路----------------------
问这个要把执行计划贴出来
------解决思路----------------------
提供数据量,表上的索引,语句执行计划会方便问题的诊断.
如果不是把语句优化到最优,只要出结果就行.根据你说的把A.NUM = 2去掉也可以得出数据,也就是说数据量大都可以得出数据,
说明目前语句的执行计划有问题,可尝试先重新收集一个表上的统计信息.
  相关解决方案