由於線上出現慢sql的警告,於是進行優化
每一個inner join on 後面的條件都建有索引
原句:
select p.eval_id
FROM
p_evaluation p
INNER JOIN crm_consumer_company ccc ON
ccc.company_id = p.company_id
INNER JOIN crm_dept cd ON
cd.related_company_id = ccc.server_company_id
INNER JOIN biaoju_caishui.zhubajie_caishui_crm.crm_staff cs ON
cs.company_id = cd.company_id
AND cs.staff_id = 9169
WHERE
1 = 1
AND p.data_type = 'EVAL'
AND p.staff_type = 'ACCT'
這個inner join 沒有走索引。原因具體的我也不知道
後面就直接想到拆分
優化後:
SELECT
count(p.eval_id)
FROM
biaoju_caishui.zhubajie_caishui_crm.p_evaluation p
RIGHT join (
SELECT
company_id
FROM
biaoju_caishui.zhubajie_caishui_crm.crm_consumer_company a
RIGHT join (
SELECT
DISTINCT related_company_id
FROM
biaoju_caishui.zhubajie_caishui_crm.crm_dept
where
company_id = (SELECT company_id from biaoju_caishui.zhubajie_caishui_crm.crm_staff where staff_id=9169) ) bb on
bb.related_company_id = a.server_company_id
where
bb.related_company_id is not null) cc on
cc.company_id = p.company_id
where
p.data_type = 'EVAL'
AND p.staff_type = 'ACCT'
把每一個inner join 拆出來 然後用右連接來進行數據的查詢,這樣每個索引都沒用到了。速度直接快了很多