日期:2014-05-17  浏览次数:20869 次

求救,2小时查不出结果!
一张几万数据的表,对其按某字段进行了一下排序,查询之,一分钟出结果。但是,想取其前10条数据时,在外层加了where rownum<=10,结果2小时后依然在查询中!各位有什么见解都说一说吧,谢了。
select *
  from (select t.SHEET_NO, t.IF_ASK_AGAIN, t.ORGID, t.OCCUR_TIME
          from pre_entry_all_view t
         where t.IF_ASK_AGAIN > 0
           and t.ORGID = 42
           and t.OCCUR_TIME between
               to_date('2013-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and
               to_date('2013-04-30 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
         order by t.IF_ASK_AGAIN desc)
 where rownum <= 10
SQL oracle

------解决方案--------------------
虽然我不怎么懂优化,但我晓得 给出执行计划 比给出sql 更有意义
------解决方案--------------------
不可能呀 取前10条 查询效率应该低于查询全部的时间

改成where rownum < 11试试
------解决方案--------------------
引用:
Quote: 引用:

按F5 查看执行计划 是在那个阶段耗费时间 才几万条数据
看了一下,没怎么看懂,不过刚才我又写了一下,结果1分钟出来了,⊙﹏⊙b汗
select *
  from (select ROWNUM as RECNO, t.*
          from (select t.SHEET_NO, t.IF_ASK_AGAIN, t.ORGID, t.OCCUR_TIME
                  from pre_entry_all_view t
                 where t.IF_ASK_AGAIN > 0
                   and t.ORGID = 42
                   and t.OCCUR_TIME between
                       to_date('2013-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and
                       to_date('2013-04-30 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
                 order by t.IF_ASK_AGAIN desc) t) t1
 where t1.RECNO <= 10

汗死,搞了一上午的问题居然就这么解决了



优化器模式是first_rows 还是 all_rows ?