记一次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 拆出来 然后用右连接来进行数据的查询,这样每个索引都没用到了。速度直接快了很多

 

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