免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3739 | 回复: 12
打印 上一主题 下一主题

【讨论中】mysql分组统计 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-09 18:52 |只看该作者 |倒序浏览
本帖最后由 chinafenghao 于 2013-05-20 10:31 编辑

求大仙,,本人大数据量有几千万条数据,分组统计的时候,sql语句 为 “insert into 表1 select id,x,y,count(*) from 表2 group by id,x,y;”但是查询效率特别慢,,基本得不到结果。。那位高人指点一下,,怎么进行优化呢。。。

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
2 [报告]
发表于 2013-05-10 08:49 |只看该作者
该建的索引都建了吗

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
3 [报告]
发表于 2013-05-10 17:27 |只看该作者
语句看上去是没啥优化的余地了吧。

论坛徽章:
0
4 [报告]
发表于 2013-05-11 20:33 |只看该作者
我的数据没有主键,因为所有字段都有重复的值,我以id,x,y建立了索引,,但是分组查询的时候感觉作用不是很大啊,,没看到有什么作用。。。望解答,,不胜感激啊回复 2# bikong0411


   

论坛徽章:
0
5 [报告]
发表于 2013-05-11 23:59 |只看该作者
select id,x,y,count(*) from 表2 group by id,x,y
执行这个sql需要多长时间?并且贴下explain

如果explain用到了索引,但如果select的结果集很大,肯定也比较耗时,可以拆分多批次insert,比如根据ID值进行划分,这个要看具体的数据分布,

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
6 [报告]
发表于 2013-05-12 09:44 |只看该作者
回复 4# hanking123


    按楼上说的,先看执行计划

论坛徽章:
0
7 [报告]
发表于 2013-05-13 11:20 |只看该作者
我运行了一天一夜都没有得到结果,,结果集我估计得有1千万左右吧,,这跟插入的批次有关系吗?不插入只是查询也需要很长时间吧,,有没有啥好方法呢。。回复 5# G8bao7


   

论坛徽章:
0
8 [报告]
发表于 2013-05-15 22:22 |只看该作者
单次查询结果返回1千万左右的数据,即使能返回你也不会用到返回所有结果。

不一定能满足你的需求,但应该比1条sql效果好点,大概思路:
先观察下ID的分布情况,select id,count(*)  as num from 表2 group by id order by null;
    如果每个ID对应的num都不是很大,假设返回1K行,每个num在1W左右
    循环,每次查询1个iD对应的数据select id,x,y,count(*) from 表2 where id=查询ID group by x,y ORDER BY null;

  当然,真实数据可能分布的没这么均匀,就需要再用x/y进行进一步细分,保证每次select命中的结果范围别太大效率应该没什么问题
   

论坛徽章:
0
9 [报告]
发表于 2013-05-16 10:01 |只看该作者
可以值得一试
回复 8# G8bao7


   

论坛徽章:
0
10 [报告]
发表于 2013-05-16 10:03 |只看该作者
但是ID有几百万个那,,难道还要一个一个查询码回复 8# G8bao7


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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP