现在有一个oracle数据表,现在里面有40万数量,每星期大概要新增5分条,现在要查询这张表,并且排序分页,有点慢,各位有没有遇到这样的情况,索引也建了好几样,还是慢,现在慢在原因在排序的那条SQL语句, select * from ( SELECT   /*+ INDEX(tb,BBL_JY_INDEX_STARTTIME) */ rownum as nums,JYID,JYNAME,TO_CHAR(STARTTIME, 'yy-mm-dd hh24:mi:ss') AS STARTTIME,IMGURLLIST,JYPRICE,LOCUS,TXTURL FROM BBL_JY WHERE 1 = 1     AND JYNAME LIKE '%甘肃%'  AND STARTTIME IS NOT NULL and starttime >to_date('1997-1-1','yyyy-mm-dd') ORDER BY STARTTIME DESC  ) tb where tb.nums between 11 and  20    
 这是本人的sql语句或者是 tb.nums>10 and tb.nums<21  但这样和between 的速度没有相差多少
问下各位有没有什么好的办法,让他快点

解决方案 »

  1.   

    数据量过大时~~尽量不要用like关键字,它可能会遍历好几遍数据库我估计慢是慢在这了我以前是用分词做的,不过要倒次数据,具体的可以参考google,baidu的查询
      

  2.   

    TO_CHAR(STARTTIME, 'yy-mm-dd hh24:mi:ss') AS STARTTIME,这里用到了函数
    后面又是starttime >to_date('1997-1-1','yyyy-mm-dd') 
    不知你的BBL_JY_INDEX_STARTTIME索引是如何建的,估计已经用不了了
      

  3.   

    最快速的分页已经有结论了,网上很多
    select * from (
      select * from 
       (
         select t.*,rownum rn table order by XXX
       )
      where rn<=XX )
    where rn>XX
    先写<=,然后再>