+ -
当前位置:首页 → 问答吧 → 谁来优化这句超慢的sql啊!!!!

谁来优化这句超慢的sql啊!!!!

时间:2011-09-30

来源:互联网

select TYDWNO
  into E_TYDWNO
  from (select TYDWNO, ROWNUM NO
  from (select DISTINCT TYDWNO FROM TEMP_BFHPOSLC)
  where rownum < (a + 1))
  WHERE NO >= a;


a是变量从1到最后一条
几十万条数据慢死我老命啊

作者: xiaoyuaixiaofan   发布时间: 2011-09-30

SQL code
最好说一下你的数据,然后说要的功能,不要把你的SQL放上来!

作者: cosio   发布时间: 2011-09-30

引用 1 楼 cosio 的回复:
SQL code
最好说一下你的数据,然后说要的功能,不要把你的SQL放上来!



俺这条语句的功能就是个循环得到表的TYDWNO ,每次得到一个,第一个,第二个,第三个。。。
 1 TYDWNO有重复的咯,所以要先distinct啊
 2 a从0开始递增 到count(distinct TYDWNO)。比如说要取得第五行的数据 那就是嵌套嘛 内层rownum<6 外层rownum>4
 3 玩了

作者: xiaoyuaixiaofan   发布时间: 2011-09-30

还有 WHERE A="XXX"
  AND B="YYY"
  AND C="ZZZ"
这个排列顺序有什么讲究啊

作者: xiaoyuaixiaofan   发布时间: 2011-09-30

引用楼主 xiaoyuaixiaofan 的回复:
select TYDWNO
into E_TYDWNO
from (select TYDWNO, ROWNUM NO
from (select DISTINCT TYDWNO FROM TEMP_BFHPOSLC)
where rownum < (a + 1))
WHERE NO >= a;


a是变量从1到最后一条
几十万条数据慢死我老命啊


使用select DISTINCT TYDWNO FROM TEMP_BFHPOSLC这条SQL建立一个游标,然后用游标去处理即可。如果你的编程环境支持结果集处理可以使用上面的语句直接得到一个结果集,然后对这个结果集进行循环处理。推荐用结果集的方案,如果编程环境不支持就采用游标吧。

作者: xiaobn_cn   发布时间: 2011-09-30

引用 4 楼 xiaobn_cn 的回复:
引用楼主 xiaoyuaixiaofan 的回复:
select TYDWNO
into E_TYDWNO
from (select TYDWNO, ROWNUM NO
from (select DISTINCT TYDWNO FROM TEMP_BFHPOSLC)
where rownum < (a + 1))
WHERE NO >= a;


a是变量从1到最后一条
几十万……



哼。。之前就是用的游标,2万条数据要2分钟吧,嫌太慢了。众人皆说游标效率低。遂改之。现在经过优化后更慢了,要4分钟。看看就是这句话太慢了!!!

作者: xiaoyuaixiaofan   发布时间: 2011-09-30