设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2409|回复: 6
打印 上一主题 下一主题

【MySQL】关于主从表分组合计需注意的事项

[复制链接]
跳转到指定楼层
1#
发表于 2019-3-29 15:36:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
之前并没特别留意MySQL的优化问题,结果一不小心就翻车了,总结一下,供大家参考。
背景是这样的:主表【crm_callout_job】大约150条记录,明细表【crm_callout_task_his】约500万记录,一开始我就想当然地写了以下语句:
  1. select a.job_id,a.job_name,a.transfer_name,a.total_task_count,a.his_task_count,
  2. sum(case when b.callout_status=2 then 1 else 0 end) call_total from crm_callout_job a left join
  3. crm_callout_task_his b on a.job_id=b.job_id group by
  4. a.job_id,a.job_name,a.transfer_name,a.total_task_count,a.his_task_count
复制代码

对于Access或者SQL server,一般来说,没什么问题。但对MySQL来说,结果如下(不说了,看图吧,事实上还没跑完的。请原谅我的耐性比较差):

另外,不要以为把子查询子句嵌套到字段中会带给你惊喜。结果如下(同样也没跑完,不过我感觉两者效率应该不会差太大):

正确的做法也许可以参考这个:

总结如下:

1、不要使用子查询把合计表插入到字段中。
2、不要直接使用“LEFT JOIN A ON A.ID=B.NEW_ID”。
3、应该将明细表进行合计,再与主表进行关联。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2019-3-29 15:39:38 | 只看该作者
楼主总结到位,小白还在摸索,任重道远

点击这里给我发消息

3#
发表于 2019-3-29 16:00:16 | 只看该作者
数据嵌套多子查询就是噩梦,并不是MySQL的问题,SQLSERVER,access应该是一样的。

点击这里给我发消息

4#
发表于 2019-3-29 16:05:32 | 只看该作者
感觉连接后分组字段多,的确是比分组后连接要慢很多。

点击这里给我发消息

5#
发表于 2019-3-29 17:04:53 | 只看该作者
感谢分享!
回复

使用道具 举报

6#
发表于 2019-5-15 13:55:41 | 只看该作者
我不喜欢子查询,我情愿多做一个查询,然后通过查询连接查询,这样出错也好排查。
7#
 楼主| 发表于 2019-5-18 17:46:38 | 只看该作者
accben 发表于 2019-5-15 13:55
我不喜欢子查询,我情愿多做一个查询,然后通过查询连接查询,这样出错也好排查。

MySQL、SQL server等和Access不一样,不太方便写查询【对应的名称为“视图”】,所以通常是一步到位的select(即便这样不方便维护)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-6 00:45 , Processed in 0.115647 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表