|
之前并没特别留意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来说,结果如下(不说了,看图吧,事实上还没跑完的。请原谅我的耐性比较差):
另外,不要以为把子查询子句嵌套到字段中会带给你惊喜。结果如下(同样也没跑完,不过我感觉两者效率应该不会差太大):
正确的做法也许可以参考这个:
总结如下:
1、不要使用子查询把合计表插入到字段中。
2、不要直接使用“LEFT JOIN A ON A.ID=B.NEW_ID”。
3、应该将明细表进行合计,再与主表进行关联。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|