查看: 6140|回复: 17

[讨论] 如何提高大表的汇总查询效率

[复制链接]
论坛徽章:
3
参与WIN7挑战赛纪念
日期:2009-11-06 11:12:56生肖徽章2007版:龙
日期:2009-11-16 18:41:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41
发表于 2009-11-4 10:12 | 显示全部楼层 |阅读模式
有一个很大很大的表,是一个流水记录,十亿级以上,字段如下:area,type,month,account,fee1,fee2,。。。fee8,按area,type,month分区,area有30个,type有20个,现在要查询全区域,全业务的汇总数据,使用如下语句
select area, type, month, count(*), count(distinct account), sum(fee1+fee2+fee3+fee4+fee5+fee6+fee7+fee8) from table
group by area, type, month;
这样效率太低了,每次耗时太长,因为要求不建临时表,请问大家有什么好的办法?
谢谢~
论坛徽章:
25
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442010世博会纪念徽章
日期:2010-07-30 12:07:232011新春纪念徽章
日期:2011-02-18 11:43:332010广州亚运会纪念徽章:高尔夫球
日期:2011-04-11 18:22:37蜘蛛蛋
日期:2011-08-17 08:44:40ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15复活蛋
日期:2011-12-15 09:06:552012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:202013年新春福章
日期:2013-02-25 14:51:24
发表于 2009-11-4 10:35 | 显示全部楼层
并行全表扫描,并设置
alter session set workarea_size_policy = manual;
alter session set sort_area_size=
alter session set hash_area_size =

使用道具 举报

回复
论坛徽章:
25
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442010世博会纪念徽章
日期:2010-07-30 12:07:232011新春纪念徽章
日期:2011-02-18 11:43:332010广州亚运会纪念徽章:高尔夫球
日期:2011-04-11 18:22:37蜘蛛蛋
日期:2011-08-17 08:44:40ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15复活蛋
日期:2011-12-15 09:06:552012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:202013年新春福章
日期:2013-02-25 14:51:24
发表于 2009-11-4 10:38 | 显示全部楼层
like:
alter session set workarea_size_policy=MANUAL;
alter session set sort_area_size=52428800;
alter session set hash_area_size=209715200;

使用道具 举报

回复
论坛徽章:
37
2008新春纪念徽章
日期:2008-02-13 12:43:032010广州亚运会纪念徽章:击剑
日期:2011-01-22 20:59:112011新春纪念徽章
日期:2011-02-18 11:43:33茶鸡蛋
日期:2011-08-05 15:44:24ITPUB十周年纪念徽章
日期:2011-11-01 16:21:152012新春纪念徽章
日期:2012-01-04 11:51:22玉石琵琶
日期:2012-02-21 15:04:38ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:202013年新春福章
日期:2013-02-25 14:51:24劳斯莱斯
日期:2013-09-12 15:56:37
发表于 2009-11-4 10:53 | 显示全部楼层
并行?

使用道具 举报

回复
论坛徽章:
25
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442010世博会纪念徽章
日期:2010-07-30 12:07:232011新春纪念徽章
日期:2011-02-18 11:43:332010广州亚运会纪念徽章:高尔夫球
日期:2011-04-11 18:22:37蜘蛛蛋
日期:2011-08-17 08:44:40ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15复活蛋
日期:2011-12-15 09:06:552012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:202013年新春福章
日期:2013-02-25 14:51:24
发表于 2009-11-4 11:27 | 显示全部楼层
/*+PARALLEL(table)*/

使用道具 举报

回复
论坛徽章:
3
参与WIN7挑战赛纪念
日期:2009-11-06 11:12:56生肖徽章2007版:龙
日期:2009-11-16 18:41:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41
 楼主| 发表于 2009-11-4 11:36 | 显示全部楼层
可以再详细点么,这样设置后还是用我上面的语句查询?
我的权限不高,还不知道能不能这样设置呢。
谢谢回复。

使用道具 举报

回复
论坛徽章:
37
2008新春纪念徽章
日期:2008-02-13 12:43:032010广州亚运会纪念徽章:击剑
日期:2011-01-22 20:59:112011新春纪念徽章
日期:2011-02-18 11:43:33茶鸡蛋
日期:2011-08-05 15:44:24ITPUB十周年纪念徽章
日期:2011-11-01 16:21:152012新春纪念徽章
日期:2012-01-04 11:51:22玉石琵琶
日期:2012-02-21 15:04:38ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:202013年新春福章
日期:2013-02-25 14:51:24劳斯莱斯
日期:2013-09-12 15:56:37
发表于 2009-11-4 11:45 | 显示全部楼层
就是在你的语句中加上5楼的使用并行的提示

使用道具 举报

回复
认证徽章
论坛徽章:
9
ITPUB社区OCM联盟徽章
日期:2013-03-27 11:17:11奥运纪念徽章
日期:2013-06-18 09:13:52ITPUB社区千里马徽章
日期:2013-08-22 09:58:03大众
日期:2013-08-30 14:51:33路虎
日期:2013-12-01 18:25:42
发表于 2009-11-4 12:38 | 显示全部楼层
能不能考虑 使用索引 FULL INDEX SCAN 我个人觉得。。。

使用道具 举报

回复
论坛徽章:
113
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:42:50现任管理团队成员
日期:2011-05-07 01:45:08ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36蛋疼蛋
日期:2011-07-24 22:25:332012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25
发表于 2009-11-4 12:45 | 显示全部楼层

回复 #8 gaopengtttt 的帖子

走index full scan一般并不最优,除非index比table小很多,而且又没有其他合适的index。
因为FTS一次可以读db_file_multiblock_read_count个块。

fast_full_scan倒是可以考虑

使用道具 举报

回复
论坛徽章:
25
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442010世博会纪念徽章
日期:2010-07-30 12:07:232011新春纪念徽章
日期:2011-02-18 11:43:332010广州亚运会纪念徽章:高尔夫球
日期:2011-04-11 18:22:37蜘蛛蛋
日期:2011-08-17 08:44:40ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15复活蛋
日期:2011-12-15 09:06:552012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:202013年新春福章
日期:2013-02-25 14:51:24
发表于 2009-11-4 13:17 | 显示全部楼层
原帖由 gaopengtttt 于 2009-11-4 12:38 发表
能不能考虑 使用索引 FULL INDEX SCAN 我个人觉得。。。

select area, type, month, count(*), count(distinct account), sum(fee1+fee2+fee3+fee4+fee5+fee6+fee7+fee8) from table
group by area, type, month;
表中的字段基本上都涉及到了,建索引的话,如果涉及到的字段比较少,效果不好,涉及字段多,甚至所有字段,索引本身比表还大!再者,索引是单块读,表扫描是多块读

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表