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

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值