select no,
       corpName,
       prodName,
       address,
       proadd,
       testWay,
       TO_CHAR(startdate, 'YYYY-MM-DD') startdate,
       TO_CHAR(deadline, 'YYYY-MM-DD') deadline,
       agencies,
       batch,
       status,
       changeDate,
       importDate,
       res,
       writeOffTime,
       writeOffDepart
 from ( select t1.*, 
               row_number() over(order by no) rn
          from licenceinfo t1
         where status = 3
           and add_months(deadline, 6) >= sysdate
       )
where rn between 600 and 900;看看这种写法效果如何呢?猜测效率低是因为两表自连引起的。

解决方案 »

  1.   

    稍做修改select no,
           corpName,
           prodName,
           address,
           proadd,
           testWay,
           TO_CHAR(startdate, 'YYYY-MM-DD') startdate,
           TO_CHAR(deadline, 'YYYY-MM-DD') deadline,
           agencies,
           batch,
           status,
           changeDate,
           importDate,
           res,
           writeOffTime,
           writeOffDepart
     from ( select t1.*, 
                   row_number() over(order by no) rn
              from licenceinfo t1
             where status = 3
               and deadline >= add_months(sysdate, -6)
           )
    where rn between 600 and 900;
      

  2.   


    目测,楼主的分页方法,还算比较高效。而12w数据,这个速度太慢了。是不是索引没有用好?你那个deadline是函数索引吗,看看2楼的写法。
    再者,不用exist ,用in试下,rowid的话,不用在关联了吧,直接寻址即可。