select * From (Select * From t_mf_topic Where tid >250000 And tid<251000) t
where t.state='1' and t.sid = '0010' AND ROWNUM<=64 order by t.tid
怎么才能让该语句执行的比较块一点

解决方案 »

  1.   

    为什么要用子查询呢?直接查不行么?
    Select * From t_mf_topic
    Where ROWNUM <=64  
    AND tid >250000 
    And tid <251000
    and state='1' 
    and sid = '0010' 
    order by tid 再优化也就查询条件的顺序,能够筛选最多纪录的条件放后面
      

  2.   

    如果不用子查询的话,那那个rownum<65得到的数据就不是楼主想要的数据了吧?
      

  3.   

    还是针对where条件之后的查询字段加上几个索引吧!
      

  4.   

    不知这样可以吗?  感觉换成between and 会快一点不。
    select * from t_mf_topic  
    Where tid between 250001 And tid 259999
          and state='1' and sid = '0010' and ROWNUM <=64 
    order by tid 那个rownum 是个问题啊,不知这样查询行不行啊! 我觉得应该可以啊
      

  5.   

    这个rownum对吗?是楼主想要的不。
      

  6.   

    select * From (Select * From t_mf_topic Where tid >250000 And tid <251000) t 
    where t.state='1' and t.sid = '0010' AND ROWNUM <=64 order by t.tid 这个语句不能返回按t.tid 排序后的前64行。用
    SELECT *
      FROM (SELECT *
              FROM T_MF_TOPIC
             WHERE TID > 250000
               AND TID < 251000
               AND T.STATE = '1'
               AND T.SID = '0010'
            ORDER BY T.TID) T
     WHERE ROWNUM <= 64在tid 上建个索引,如果tid是一个整形,把TID > 250000
    AND TID < 251000改成tid between 250001 and 250999