先看一条SQL语句吧!
select dra.rationaccid from dms_rationacc dra,dms_bill_type dbt
where dra.typeid = dbt.typeid
order by dra.accdate desc
我现在就是想要提升这句SQL的速度,并且也有一点不明白,如果我不加order by的话在dms_rationacc,dms_bill_type中各有100万条数据查询速度在0.03秒左右,但是如果我加了order by的话时间就是11秒左右,现在做压力测试肯定过不了.
如果在dms_rationacc这个表中的typeid和dms_bill_type这表中typeid各建一个唯一索引的话时间是6秒左右,但是现在dms_rationacc表中的typeid是肯定会重复的,不知道现在该怎么办了,我在dra.accdate字段上也加了索引,但是根本没什么效果.
希望可以得到大家的帮助,谢谢!

解决方案 »

  1.   

    select   dra.rationaccid   from   dms_rationacc   dra
    where   dra.typeid   in (select dbt.typeid from  dms_bill_type   dbt )
    order by dra.accdate   desc 
    这样试试
      

  2.   

    建立复合索引dms_rationacc(typeid,accdate)
    聚集索引    dms_bill_type(typeid)
      

  3.   

    To wffffc:
    你这样写就是改变了我的查询条件,就算是用子查询的话也不会提高速度的,子查询的速度会更慢的.To WangZWang:
    按照你的方法添加复合索引没什么效果,速度也提不起来.
    但是不管怎么样还是谢谢两位的跟帖了.希望大家可以帮帮偶!
      

  4.   

    order by是将查到的数据进行排序..这个快不了
      

  5.   

    dra.accdate
    加个降序索引试试
      

  6.   

    dms_rationacc(typeid, accdate)这样建索引后,执行计划是怎么样子的?
      

  7.   

    Order by提速,与索引关系不大。
    因为order by 是对查询结果的排序,添加索引只能优化产生检索结果这个步骤,后面Order by的速度并不能够提高。
    如果速度难以忍受,应该考虑对排序区扩容。
    扩大sort_area_size的大小。