求教一个查询问题!

av168659700 2010-11-01 09:52:38
情况如下我建立一个分页的查询,涉及到两张表(A,B)。--这部分已经实现
然后我希望把A表中username统计出其在C表中每天的记录。于是我在那个原本的分页查询中联合上了C表,结果发现效率非常低。请问这个情况一般怎么处理比较好?用临时表?
...全文
163 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gelyon 2010-11-01
  • 打赏
  • 举报
回复
你先看看执行计划是怎么走的然后再试着用临时表做下,看看效能咋样,既然你想到用临时表,为何不先去测试下采用临时表做下,看效率怎么样呢?
av168659700 2010-11-01
  • 打赏
  • 举报
回复

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秒的呼入


把这段和上面分页查询再做一个联合查询执行效率非常慢。所以问问各位大侠,这种情况是不是应该用临时表。
gelyon 2010-11-01
  • 打赏
  • 举报
回复
看看执行计划,分析下是否有优化的地方,贴出你的SQL和表结构等,好做参考。
47522341 2010-11-01
  • 打赏
  • 举报
回复
贴出你的sql和执行计划
心中的彩虹 2010-11-01
  • 打赏
  • 举报
回复
count() over(partition by col)
无数据

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧