请教Oracle,如当采用多字段group by 查询效率出路在哪里?

mark_lz 2013-05-13 08:58:40
先有这么一个应用场景,根据条件查询单表A,语句如下:

select sum(a.销售数量),sum(a.库存),a.国家,a.地市,a.年,a.时间,a.产品,....(大概10多个字段) from A a by a.国家,a.地市,a.年,a.时间,a.产品,....(大概10多个字段) order by a.产品,a.年


进入这个项目组直接丟了几个模块过来,你去优化吧.......
功能响应时间在8-12秒左右,分析下前代码发现瓶颈在数据库中,数据库中执行语句7-10左右

表A数据量1000W-1500W 左右 每天凌晨会删除掉
项目采用Struts2+EJB+Ibatis+Oracle

如何优化,让我如此头大!请指教~
...全文
1610 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
staryyjava 2015-03-16
  • 打赏
  • 举报
回复
请问楼主的问题 最后输如何解决的? 我也碰到了相似的问题。
vanjayhsu 2013-05-23
  • 打赏
  • 举报
回复
引用 5 楼 mark_lz 的回复:
[quote=引用 4 楼 vanjayhsu 的回复:] 没有where条件?对全表(1000W级)进行GROUP BY和聚合?如果是这样的话,数据库级的优化效率也不会太高。对于这种统计数据的优化,ORACLE提供了最好的解决办法--物化视图。
感谢你的回答、还有个问题问下: 表A每天凌晨会吧数据全部delete掉,每天凌晨调用一个存储过程重新集成数据,没有新增、修改、删除的用户操作,这种物化视图是创建那种方式最为合理?帮忙详细解释下、物化视图没怎么接触过,再次感谢;[/quote] 如果是这样的话,那你可以在存储过程重新生成数据之后再生成一个统计表就可以了,没必要用物化视图了。用物化视图的话,肯定要用完全刷新的方式来建,那其实和建是一个原理了。
vssvss 2013-05-23
  • 打赏
  • 举报
回复
我的理解是 你每天凌晨统计下数据 这个数据直到下一天的凌晨是不会变得的话 这样 物化视图 说白了 就是一个数据 管这一天的 下一天是另一个
jdsnhan 2013-05-15
  • 打赏
  • 举报
回复
1000-1500W 全表的聚合,10秒的速度不错了。 具体的帖个执行计划 如果每天都全表删除,用truncate,不用delete
forgetsam 2013-05-15
  • 打赏
  • 举报
回复
引用 5 楼 mark_lz 的回复:
感谢你的回答、还有个问题问下: 表A每天凌晨会吧数据全部delete掉,每天凌晨调用一个存储过程重新集成数据,没有新增、修改、删除的用户操作,这种物化视图是创建那种方式最为合理?帮忙详细解释下、物化视图没怎么接触过,再次感谢;
也就是说凌晨之后一天之内数据不会变。 那就在它调用完存储过程之后create table *** as select *** group by ***然后直接查询这个表不就完了。物化视图也是这个原理。
vanjayhsu 2013-05-14
  • 打赏
  • 举报
回复
没有where条件?对全表(1000W级)进行GROUP BY和聚合?如果是这样的话,数据库级的优化效率也不会太高。对于这种统计数据的优化,ORACLE提供了最好的解决办法--物化视图。
mark_lz 2013-05-14
  • 打赏
  • 举报
回复
引用 3 楼 rucypli 的回复:
如果数据的实时性要求不高的话 可以考虑定时几分钟执行一次 将结果存入小表中以对外提供
表A每天凌晨会吧数据全部delete掉,每天凌晨调用一个存储过程重新集成数据,没有新增、修改、删除的用户操作,如果进行分表操作如何具体实施?这样代码改动我觉得会过大、存在一定的风险性、你觉得呢?
mark_lz 2013-05-14
  • 打赏
  • 举报
回复
引用 4 楼 vanjayhsu 的回复:
没有where条件?对全表(1000W级)进行GROUP BY和聚合?如果是这样的话,数据库级的优化效率也不会太高。对于这种统计数据的优化,ORACLE提供了最好的解决办法--物化视图。
感谢你的回答、还有个问题问下: 表A每天凌晨会吧数据全部delete掉,每天凌晨调用一个存储过程重新集成数据,没有新增、修改、删除的用户操作,这种物化视图是创建那种方式最为合理?帮忙详细解释下、物化视图没怎么接触过,再次感谢;
rucypli 2013-05-13
  • 打赏
  • 举报
回复
如果数据的实时性要求不高的话 可以考虑定时几分钟执行一次 将结果存入小表中以对外提供
mark_lz 2013-05-13
  • 打赏
  • 举报
回复
引用 1 楼 ACMAIN_CHM 的回复:
根据 group by 后的字段创建索引。
组合索引?我试着创建过位图索引,但那也只是在本地验证效率,速度上确实提上到1-3, 但是表A经常有INSERT,DELETE,UPDATE的操作,index超过10个字段你确定?
ACMAIN_CHM 2013-05-13
  • 打赏
  • 举报
回复
根据 group by 后的字段创建索引。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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