大家看看这段代码可以那些地方可以优化一下?
select table1.*,sfz.dq,A.min,T1.rate as ratemin,A.max,T2.rate as ratemax,T3.gjj_rate as gjj_ratemin,B.gjjmin,T4.gjj_rate as gjj_ratemax,B.gjjmax from table1
left join ( select ygid, min(changedate) as min, max(changedate) as max from sb_rate group by ygid
) A on table1.id=A.ygid
left join sb_rate T1
on T1.ygid=A.ygid and T1.changedate=A.min
left join sb_rate T2
on T2.ygid=A.ygid and T2.changedate=A.max
left join (select ygid,min(changedate) as gjjmin,max(changedate) as gjjmax from gjj_rate group by ygid
) B
on table1.id=B.ygid
left join gjj_rate T3
on T3.ygid=B.ygid and T3.changedate=B.gjjmin
left join gjj_rate T4
on T4.ygid=B.ygid and T4.changedate=B.gjjmax
left join sfz on left(id_card,6)=sfz.bm
------解决方案--------------------
--子查询试试,再合理建索引
select table1.* ,
dq=(select bm from sfz where bm=left(table1.id_card,6)),
min=(select min(changedate) from sb_rate where ygid=table1.id),
ratemin=(select rate from sb_rate where ygid=table1.id and changedate=(select min(changedate) from sb_rate where ygid=table1.id)),
max=(select max(changedate) from sb_rate where ygid=table1.id),
ratemax=(select rate from sb_rate where ygid=table1.id and changedate=(select max(changedate) from sb_rate where ygid=table1.id)),
gjj_ratemin=(select gjj_rate from gjj_rate where ygid=table1.id and changedate=(select min(changedate) from gjj_rate where ygid=table1.id)),
gjjmin=(select min(changedate) from gjj_rate where ygid=table1.id ),
gjj_ratemax=(select gjj_rate from gjj_rate where ygid=table1.id and changedate=(select max(changedate) from gjj_rate where ygid=table1.id)),
gjjmax=(select max(changedate) from gjj_rate where ygid=table1.id )
from table1