0
点赞
收藏
分享

微信扫一扫

sql优化记录

山竹山竹px 2022-01-30 阅读 90

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.对应字段建立索引。

举报

相关推荐

0 条评论