改进后:(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
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did118301