select count(*) from ( select distinct p.BID_PLAN_ID, p.BID_YEAR, p.BID_BATCH, to_char(p.AUDIT_START_DATE, 'yyyy-mm-dd'), to_char(p.AUDIT_END_DATE, 'yyyy-mm-dd'), to_char(p.PUB_DATA, 'yyyy-mm-dd'), to_char(p.OPENBID_START_DATE, 'yyyy-mm-dd'), to_char(p.BID_DATE, 'yyyy-mm-dd'), p.IS_USE, p.IS_APPLY, p.create_date, o.org_name from pa_t_bid_plan p left outer join sm_t_org o on p.company_id = o.org_id where p.is_use = 1 and p.website_id=11 order by p.create_date desc )**************************
SQL=select * from (select rownum r,a.* from ( select distinct p.BID_PLAN_ID, p.BID_YEAR, p.BID_BATCH, to_char(p.AUDIT_START_DATE, 'yyyy-mm-dd'), to_char(p.AUDIT_END_DATE, 'yyyy-mm-dd'), to_char(p.PUB_DATA, 'yyyy-mm-dd'), to_char(p.OPENBID_START_DATE, 'yyyy-mm-dd'), to_char(p.BID_DATE, 'yyyy-mm-dd'), p.IS_USE, p.IS_APPLY, p.create_date, o.org_name from pa_t_bid_plan p left outer join sm_t_org o on p.company_id = o.org_id where p.is_use = 1 and p.website_id=11 order by p.create_date desc ) a where rownum<=10 ) b where r>=1

解决方案 »

  1.   

    1、select count(*) 
    from 
        (select 
         distinct 
             p.BID_PLAN_ID, 
             p.BID_YEAR, 
             p.BID_BATCH, 
             to_char(p.AUDIT_START_DATE, 'yyyy-mm-dd'), 
             to_char(p.AUDIT_END_DATE, 'yyyy-mm-dd'), 
             to_char(p.PUB_DATA, 'yyyy-mm-dd'), 
             to_char(p.OPENBID_START_DATE, 'yyyy-mm-dd'), 
             to_char(p.BID_DATE, 'yyyy-mm-dd'), 
             p.IS_USE, 
             p.IS_APPLY, 
             p.create_date, 
             o.org_name 
         from 
             pa_t_bid_plan p 
         left outer join 
             sm_t_org o 
         on 
             p.company_id = o.org_id 
         where 
             p.is_use = 1 
             and 
             p.website_id=11 
         order by 
             p.create_date desc)对于这个子查询而言,order by 排序应该没有必要。
      

  2.   

    select count(*) from ( select distinct p.BID_PLAN_ID, p.BID_YEAR, p.BID_BATCH, to_char(p.AUDIT_START_DATE, 'yyyy-mm-dd'), to_char(p.AUDIT_END_DATE, 'yyyy-mm-dd'), to_char(p.PUB_DATA, 'yyyy-mm-dd'), to_char(p.OPENBID_START_DATE, 'yyyy-mm-dd'), to_char(p.BID_DATE, 'yyyy-mm-dd'), p.IS_USE, p.IS_APPLY, p.create_date, o.org_name from pa_t_bid_plan p left outer join sm_t_org o on p.company_id = o.org_id where p.is_use = 1 and p.website_id=11 order by p.create_date desc )
    这里的order by 没有意义,只是为了统计总数,完全可以去掉
      

  3.   

    SQL=select * from (select rownum r,a.* from ( select distinct p.BID_PLAN_ID, p.BID_YEAR, p.BID_BATCH, to_char(p.AUDIT_START_DATE, 'yyyy-mm-dd'), to_char(p.AUDIT_END_DATE, 'yyyy-mm-dd'), to_char(p.PUB_DATA, 'yyyy-mm-dd'), to_char(p.OPENBID_START_DATE, 'yyyy-mm-dd'), to_char(p.BID_DATE, 'yyyy-mm-dd'), p.IS_USE, p.IS_APPLY, p.create_date, o.org_name from pa_t_bid_plan p left outer join sm_t_org o on p.company_id = o.org_id where p.is_use = 1 and p.website_id=11 order by p.create_date desc ) a where rownum<=10 ) b where r>=1这条还可以优化吗
      

  4.   

    ... where r>=1 在这里这个条件没有什么意义,可以去掉。
      

  5.   

    多了一层select语句,在数据库表的设计上看能不能想办法去掉那个distinct,如果能去掉,速度将会提高很多