Office中国论坛/Access中国论坛
标题:
【MySQL】关于主从表分组合计需注意的事项
[打印本页]
作者:
roych
时间:
2019-3-29 15:36
标题:
【MySQL】关于主从表分组合计需注意的事项
之前并没特别留意MySQL的优化问题,结果一不小心就翻车了,总结一下,供大家参考。
背景是这样的:主表【
crm_callout_job
】大约150条记录,明细表【
crm_callout_task_his
】约500万记录,一开始我就想当然地写了以下语句:
select a.job_id,a.job_name,a.transfer_name,a.total_task_count,a.his_task_count,
sum(case when b.callout_status=2 then 1 else 0 end) call_total from crm_callout_job a left join
crm_callout_task_his b on a.job_id=b.job_id group by
a.job_id,a.job_name,a.transfer_name,a.total_task_count,a.his_task_count
复制代码
对于Access或者SQL server,一般来说,没什么问题。但对MySQL来说,结果如下(不说了,看图吧,事实上还没跑完的。请原谅我的耐性比较差
):
[attach]63313[/attach]
另外,不要以为把子查询子句嵌套到字段中会带给你惊喜。结果如下(同样也没跑完,不过我感觉两者效率应该不会差太大):
[attach]63312[/attach]
正确的做法也许可以参考这个:
[attach]63314[/attach]
总结如下:
1、不要使用子查询把合计表插入到字段中。
2、不要直接使用“LEFT JOIN A ON A.ID=B.NEW_ID”。
3、应该将明细表进行合计,再与主表进行关联。
作者:
haitersong
时间:
2019-3-29 15:39
楼主总结到位,小白还在摸索,任重道远
作者:
zpy2
时间:
2019-3-29 16:00
数据嵌套多子查询就是噩梦,并不是MySQL的问题,SQLSERVER,access应该是一样的。
作者:
zpy2
时间:
2019-3-29 16:05
感觉连接后分组字段多,的确是比分组后连接要慢很多。
作者:
tmtony
时间:
2019-3-29 17:04
感谢分享!
作者:
accben
时间:
2019-5-15 13:55
我不喜欢子查询,我情愿多做一个查询,然后通过查询连接查询,这样出错也好排查。
作者:
roych
时间:
2019-5-18 17:46
accben 发表于 2019-5-15 13:55
我不喜欢子查询,我情愿多做一个查询,然后通过查询连接查询,这样出错也好排查。
MySQL、SQL server等和Access不一样,不太方便写查询【对应的名称为“视图”】,所以通常是一步到位的select(即便这样不方便维护)。
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3