当前位置:Gxlcms > 数据库问题 > 数据库查询优化

数据库查询优化

时间:2021-07-01 10:21:17 帮助过:34人阅读

select pr.cid, case when pr.type = 2 then ac.auto_cancel else ca.auto_cancel end auto_cancel, pr.proxy_id proxy_id from crm_scm_cust_proxy_rel pr LEFT JOIN crm_company_config_air ca on pr.cid = ca.cid and ca.auto_cancel >0 LEFT JOIN pf_air_config ac on ac.face_cid = pr.cid and ac.auto_cancel >0 where pr.status = 1 and (( pr.type = 1 and ca.auto_cancel >0) or (pr.type = 2 and ac.auto_cancel >0));

改进后:(execution: 156 ms, fetching: 41 ms)

EXPLAIN
select
    pr.cid,
    case when pr.type = 2 then ac.auto_cancel else ca.auto_cancel end auto_cancel,
    pr.proxy_id proxy_id
from
    crm_scm_cust_proxy_rel pr LEFT JOIN
    (select ca.* from crm_company_config_air ca   where ca.auto_cancel >0)ca  on pr.cid = ca.cid  LEFT JOIN
    (select ac.* from pf_air_config   ac where   ac.auto_cancel >0) ac on ac.face_cid = pr.cid
where
        pr.status = 1 and
    (( pr.type = 1 and ca.auto_cancel >0) or (pr.type = 2 and ac.auto_cancel >0));

第二种思路:

explain
select pr.cid,
       case when pr.type = 2 then ac.auto_cancel else ca.auto_cancel end auto_cancel,
       pr.proxy_id                                                       proxy_id
from crm_scm_cust_proxy_rel pr
         LEFT JOIN
     crm_company_config_air ca on pr.cid = ca.cid and ca.auto_cancel > 0
         LEFT JOIN
     pf_air_config ac on ac.face_cid = pr.cid and ac.auto_cancel > 0
where pr.status = 1
  and ((pr.type = 1 and ca.auto_cancel > 0))
union all
select pr.cid,
       case when pr.type = 2 then ac.auto_cancel else ca.auto_cancel end auto_cancel,
       pr.proxy_id                                                       proxy_id
from crm_scm_cust_proxy_rel pr
         LEFT JOIN
     crm_company_config_air ca on pr.cid = ca.cid and ca.auto_cancel > 0
         LEFT JOIN
     pf_air_config ac on ac.face_cid = pr.cid and ac.auto_cancel > 0
where pr.status = 1
  and (pr.type = 2 and ac.auto_cancel > 0);

 

数据库查询优化

标签:cut   lse   pre   语句   HERE   思路   ase   cancel   explain   

人气教程排行