技術(shù) 點
- 技術(shù)
- 點
- V幣
- 點
- 積分
- 22850
|
之前并沒特別留意MySQL的優(yōu)化問題,結(jié)果一不小心就翻車了,總結(jié)一下,供大家參考。
背景是這樣的:主表【crm_callout_job】大約150條記錄,明細(xì)表【crm_callout_task_his】約500萬記錄,一開始我就想當(dāng)然地寫了以下語句:
- 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
復(fù)制代碼
對于Access或者SQL server,一般來說,沒什么問題。但對MySQL來說,結(jié)果如下(不說了,看圖吧,事實上還沒跑完的。請原諒我的耐性比較差 ):
另外,不要以為把子查詢子句嵌套到字段中會帶給你驚喜。結(jié)果如下(同樣也沒跑完,不過我感覺兩者效率應(yīng)該不會差太大):
正確的做法也許可以參考這個:
總結(jié)如下:
1、不要使用子查詢把合計表插入到字段中。
2、不要直接使用“LEFT JOIN A ON A.ID=B.NEW_ID”。
3、應(yīng)該將明細(xì)表進(jìn)行合計,再與主表進(jìn)行關(guān)聯(lián)。
|
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?注冊
x
|