查看: 2519|回复: 7

这个语句花费了58分钟,大家看看如何优化,谢谢!

[复制链接]
论坛徽章:
5
会员2006贡献徽章
日期:2006-04-17 13:46:34会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44生肖徽章2007版:鼠
日期:2008-01-02 17:35:53ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51
发表于 2009-11-25 10:06 | 显示全部楼层 |阅读模式
这条语句花了58分钟

insert into tempas (usernamesum,regtime,optime, recordtime,provinceid,cityid,TOTALNUM,activitynum,portalnum,blognum,photonum,friendnum,usernum,groupnum,gamenum,newsnum,booknum,musicnum,mobile ,wapgamenum,peanum ) select max(username),max(regtime),'20091124', max(recordtime) ,max(provinceid),max(cityid), --count(recordtime) as TOTALNUM, sum(pv) as TOTALNUM, sum(case when uri='/activity.do' then pv else 0 end ) as activitynum, sum(case when uri='/portal.do' then pv else 0 end ) as portalnum, sum(case when uri='/blog.do' then pv else 0 end ) as blognum, sum(case when uri='/photo.do' then pv else 0 end ) as photonum, sum(case when uri='/friend.do' then pv else 0 end ) as friendnum, sum(case when uri='/user.do' then pv else 0 end ) as usernum, sum(case when uri='/group.do' then pv else 0 end ) as groupnum, sum(case when uri='/game.do' then pv else 0 end ) as gamenum, sum(case when uri='/news.do' then pv else 0 end ) as newsnum, sum(case when uri='/book.do' then pv else 0 end ) as booknum, sum(case when uri='/music.do' then pv else 0 end ) as musicnum, mobile , sum(case when uri='wapgame' then pv else 0 end ) as wapgamenum, sum(case when uri='pea.do' then pv else 0 end ) as peanum  from mid_group group by mobile

这个表总共才100多万行数据,时间都花在哪里了?都花在case when 了?

如果是这样,那case when效率是不是值得怀疑,是否有别的方法呢?
论坛徽章:
9
2009新春纪念徽章
日期:2009-01-04 14:52:28祖国60周年纪念徽章
日期:2009-10-09 08:28:00ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51蛋疼蛋
日期:2011-08-09 14:26:55ITPUB十周年纪念徽章
日期:2011-11-01 16:24:51ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:19奥迪
日期:2013-09-12 15:57:042014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09
发表于 2009-11-25 10:17 | 显示全部楼层
你单独执行select 需要多久? 不能乱猜,要看看具体时间在那里

使用道具 举报

回复
论坛徽章:
44
秀才
日期:2016-04-29 15:03:39秀才
日期:2018-01-02 15:29:54秀才
日期:2018-01-02 15:29:54秀才
日期:2018-01-02 15:29:54秀才
日期:2018-01-02 15:35:05秀才
日期:2018-01-02 15:35:50秀才
日期:2018-01-02 15:35:50秀才
日期:2018-01-02 15:35:50状元
日期:2018-01-03 13:36:41榜眼
日期:2018-01-03 13:36:41
发表于 2009-11-25 10:28 | 显示全部楼层
贴出执行计划看看,考虑mobile索引。。。,计算列太多考虑bluk游标吧!

使用道具 举报

回复
论坛徽章:
281
2015年新春福章
日期:2015-03-06 11:57:312012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-01-04 11:51:22蛋疼蛋
日期:2011-12-29 07:37:22迷宫蛋
日期:2011-12-26 14:19:41茶鸡蛋
日期:2011-11-17 09:20:52茶鸡蛋
日期:2011-11-10 22:42:38ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15茶鸡蛋
日期:2011-10-24 09:48:48ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47
发表于 2009-11-25 10:34 | 显示全部楼层
试试先把select的结果集保存到临时表中,再向目标表insert

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
9
生肖徽章2007版:牛
日期:2009-03-10 21:26:492010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:葡萄牙
日期:2010-02-22 14:35:242010新春纪念徽章
日期:2010-03-01 11:19:092010广州亚运会纪念徽章:射击
日期:2010-09-08 23:42:12ITPUB9周年纪念徽章
日期:2010-10-08 09:31:212010广州亚运会纪念徽章:拳击
日期:2010-10-30 00:46:582011新春纪念徽章
日期:2011-02-18 11:43:322011新春纪念徽章
日期:2011-03-01 08:49:39
发表于 2009-11-25 10:45 | 显示全部楼层
执行计划

使用道具 举报

回复
论坛徽章:
5
会员2006贡献徽章
日期:2006-04-17 13:46:34会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44生肖徽章2007版:鼠
日期:2008-01-02 17:35:53ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51
 楼主| 发表于 2009-11-26 10:27 | 显示全部楼层
不好意思,问题不是出在case when上,case when非常快,关键是这个插入的表数据大,有2个索引,所以慢了
我先  alter index xxxx unusable;
插入数据库后
alter index xxx rebuild;

这样总共12分钟搞定,谢谢大家了!

使用道具 举报

回复
论坛徽章:
17
授权会员
日期:2005-10-30 17:05:33优秀写手
日期:2014-03-20 06:00:352013年新春福章
日期:2013-02-25 14:51:242012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412011新春纪念徽章
日期:2011-02-18 11:43:352011新春纪念徽章
日期:2011-01-04 10:38:442010新春纪念徽章
日期:2010-03-01 11:05:00生肖徽章2007版:马
日期:2009-11-03 13:55:02祖国60周年纪念徽章
日期:2009-10-09 08:28:00
发表于 2009-11-26 10:39 | 显示全部楼层
原帖由 dai_zhy 于 2009-11-26 10:27 发表
不好意思,问题不是出在case when上,case when非常快,关键是这个插入的表数据大,有2个索引,所以慢了
我先  alter index xxxx unusable;
插入数据库后
alter index xxx rebuild;

这样总共12分钟搞定,谢谢大家了!


好在你目标表的数据那时间段没有session访问,否则这个方法不一定可取.

使用道具 举报

回复
论坛徽章:
5
会员2006贡献徽章
日期:2006-04-17 13:46:34会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44生肖徽章2007版:鼠
日期:2008-01-02 17:35:53ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51
 楼主| 发表于 2009-11-27 11:17 | 显示全部楼层
这个是一个bi的库,这个只是一个中间表,没有人访问的!

使用道具 举报

回复

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

本版积分规则 发表回复

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