情况如下我建立一个分页的查询,涉及到两张表(A,B)。--这部分已经实现
然后我希望把A表中username统计出其在C表中每天的记录。于是我在那个原本的分页查询中联合上了C表,结果发现效率非常低。请问这个情况一般怎么处理比较好?用临时表?

解决方案 »

  1.   

    count() over(partition by col)
    无数据
      

  2.   

    看看执行计划,分析下是否有优化的地方,贴出你的SQL和表结构等,好做参考。
      

  3.   


    select tab2.*,b.字段 from (
    select rownum RN ,tab1
    .* from (
    select * from A where 条件
    order by 条件
    ) tab1
    ) tab2
    where 条件 and 
    RN between startnum and endnum
    这个是查询A,B两表分页的东西,大致是这样的,部分地方有简略。这块执行没什么问题。
    现在我有一个C表
    我需要统计出C表今天的数量(A表中的一个字段和C表关联)
    具体统计如下count
    (
    case 
    when to_char(c.CALLAGENTSTARTTIME,'yyyy-mm-dd')=to_char(sysdate,'yyyy-mm-dd') 
    then (case  when C.AGENTTYPE='呼出' then c.CALLAGENTSTARTTIME end)
    end
    ) AS F_AGENTTODAYCALLCOUNT,  //统计今天呼出
    count
    (
    case 
    when to_char(C.CALLAGENTSTARTTIME,'yyyy-mm-dd')=to_char(sysdate,'yyyy-mm-dd') 
    then (case  when C.AGENTTYPE='呼入' then c.CALLAGENTSTARTTIME end)
    end
    ) AS F_AGENTTOADYANSWERCOUNT, //统计呼入count
    (
    case
    when to_char(C.CALLAGENTSTARTTIME,'yyyy-mm-dd')=to_char(sysdate,'yyyy-mm-dd') and c.AGENTTYPE='呼出'  and C.AGENTTALKSECONDS>6
    then CALLAGENTSTARTTIME
    end
    ) as realCalls //大于6秒的呼入
    把这段和上面分页查询再做一个联合查询执行效率非常慢。所以问问各位大侠,这种情况是不是应该用临时表。