1.多表关联,尽量在内部筛选掉表数据以后再关联
例子:
elect count(distinct c.id) as ps_count,sum(case when type='zb' then 1 else 0 end) as zb_count,
sum(case when type='sc' then 1 else 0 end) as sc_count, sum(case when type='zw' then 1 else 0 end) as zw_count
from
(
select ps_id from audit_electric_psinfo_check_item where data_status=1 group by ps_id
)a
inner join
(
select ps_id,id,type from (
select ps_id,id,'zw' as type from psinfo_government_equip_info where data_status=1
union
select ps_id,id,'sc' as type from psinfo_product_equip_info where data_status=1
union
select ps_id,id,'zb' as type from psinfo_power_summary_info where data_status=1
) a group by ps_id,id,type
) b on a.ps_id=b.ps_id
inner join
(
select id,region_code,province_code,city_code
from psinfo_ps_base a
inner join psinfo_region b on a.id=b.ps_id
) c on a.ps_id=c.id
inner join
(
select region_code,left_code from dic_70city where data_status=1
) d on c.region_code like left_code+'%'
left join (
select b.val_id,a.id as zd_industry_id from dic_industry_region_vallery_group a
inner join dic_industry_region_vallery_item b on a.id=b.group_id
where a.dic_type='DIC_01' and a.data_status=1 and b.data_status=1
) e on c.id=e.val_id
left join (
select ps_id,0 as is_zd from audit_check_monitor_item where data_status=1 and year=2022 group by ps_id
union
select ps_id,1 as is_zd from audit_no_psinfo_mp_check_info where data_status=1 group by ps_id
) f on c.id=f.ps_id
2.表数据多的情况下,尽量减少函数的使用,比如left(region_code,2),尤其在表关联的字段上,不要使用函数处理,效率非常低
3.表数据多的情况下,表关联,不要使用between and 这样的判断条件,这样会使扫描行数成倍增加,非常影响效率
4.对应字段建立索引。