为啥有个嵌套查询 根据分类号查询。
试试这个呢select *
  from (select A.*, ROWNUM RN
          from (select s.itemid,
                       t.typename,
                       s.title,
                       s.userid,
                       m.companyname,
                       s.publishdate,
                       s.categoryid,
                       s.clicknum,
                       count(s.id) over(partition by s.categoryid) as matchcount
                  from sd_supplydemand s,
                       sd_type t,
                       tbl_221_member m,
                       tbl_221_regions r/*,
                       (select s.categoryid, count(*) as matchcount
                          from sd_supplydemand s
                         group by s.categoryid) tb*/
                 where s.typeid = t.typeid
                   and s.userid = m.userid
                   and s.country = r.regionid
                   /*and s.categoryid = tb.categoryid*/
                 order by s.publishdate desc) A)
 order by publishdate desc

解决方案 »

  1.   

    你外面嵌套哪么多层干嘛?
    有没有添加上分页select s.itemid,
                           t.typename,
                           s.title,
                           s.userid,
                           m.companyname,
                           s.publishdate,
                           s.categoryid,
                           s.clicknum,
                           count(s.id) over(partition by s.categoryid) as matchcount
                      from sd_supplydemand s,
                           sd_type t,
                           tbl_221_member m,
                           tbl_221_regions r
                     where s.typeid = t.typeid
                       and s.userid = m.userid
                       and s.country = r.regionid
                     order by s.publishdate desc
      

  2.   

    还有,你sd_supplydemand 和 sd_type,tbl_221_member,tbl_221_regions对应关系?各表索引呢?
      

  3.   

    主要是你 order by 太耗时了~后面那个 rownum 能否用序列生成? 
      

  4.   

    /*select * from*/
             (
             select A.*, seq.nextval RN from (
             select s.itemid,t.typename,s.title,s.userid,m.companyname,s.publishdate,s.categoryid,s.clicknum,tb.matchcount
             from sd_supplydemand s,sd_type t,tbl_221_member m
             (select s.categoryid,count(*) as matchcount from sd_supplydemand s group by s.categoryid) tb
             where s.typeid = t.typeid and s.userid = m.userid and s.country = r.regionid and s.categoryid = tb.categoryid
             and exists (select 1 from tbl_221_regions r where s.country = r.regionid )                 
             order by s.publishdate desc
             ) A)
          /*   order by publishdate desc*/