上周工作中遇到了三表联查的sql优化问题。
线上告警sql查询时间15S,而且占用数据库大量资源,导致其他交易请求访问成功率下降。
下面是原有sql:
select * from A
left join
B A.cd = B.cd
left join C A.pid = c.pid
where B.condition1 and B.condition2
优化之后的sql
select * from A
inner join
(select * from B where B.condition1 and B.condition2 ) f A.cd = f.cd
left join C A.pid = c.pid
1.我想把B表的数据集变小 , 所以把 left join 变成 inner join ,
2.B.condition 被我做成索引
有以下两个问题:
1.这样优化是否得到的结果和原来的sql运行结果是否一致。
2.这样优化是否有性能上的提升。