多表联查 on or 索引失效优化

本文探讨了如何通过分解OR条件查询、使用UNION ALL加速、以及合并子查询来优化SQL查询性能。实例展示了如何利用IFNULL处理跨表数据获取,并提供了两种主要的优化技巧:利用索引和并行查询技术提升复杂JOIN操作效率。
摘要由CSDN通过智能技术生成

多表联查 on or 索引失效优化

案例:

select * 
from A  a left join B b on a.id = b.id or concat(a.id,'_1') = b.id
left join C c on a.username = b.username
where a.sex = '男'

优化:

select 
a.字段,
b.字段,
ifnull(b.字段,b2.字段) as 字段,//a表对应的字段值在b和b2表中不是同时存在的情况,判断获取
a.字段,
......
from A  a left join B b on a.id = b.id left join B b2 concat(a.id,'_1') = b2.id
left join C c on a.username = b.username
where a.sex = '男'

总结:

1.可以使用union( all)函数,把or函数的数据分开查询,然后通过union( all)函数合并,注意:union all函数比union 函数执行速度更快一点。union all表示合并数据(不去重),union表示合并数据(去重,去重原因是:一行数据完全一致,才算是同一条数据,进行去重)

2.直接再次把副表进行对应的join,然后如果字段对应的数据值需要在两个副表中获取,则需要进行判断获取。例如上面优化SQL中的ifnull()函数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值