記一次inner join sql優化

由於線上出現慢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 拆出來 然後用右連接來進行數據的查詢,這樣每個索引都沒用到了。速度直接快了很多

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章