MySQL where嵌套和join谁效率高


最近,工作稍微没有那么繁忙,抽空记录一下遇到相关技术问题吧,最近有一个同事找我要一个MySQL数据库的一个数据报表,数据给他查出来了,随便把sql也丢给他了,他说我写的sql执行效率有点低。一眼看过去都是嵌套,我干数据也算有些年头了,我觉得我也是个老手了,写的sql真的执行效率那么低么?于是开始了我的分析之路。

1.问题sql回顾

我的嵌套sql:

SELECT count(1) FROM `log_user_integral` b 
where r_user_code in
(select d_user_code from `user` where r_area_code in (
select d_area_code from practical_area 
where d_level_code like'%348bbfeadd0e4e9eb29551591dd1488a%')
) 

这里的like是逃不掉了。
同事认为的sql应该是这样:

SELECT count(1) FROM `log_user_integral` b 
-- where r_user_code in 
INNER JOIN
(select d_user_code from `user` where r_area_code in (
select d_area_code from practical_area where d_level_code like'%348bbfeadd0e4e9eb29551591dd1488a%')
) a
on b.r_user_code=a.d_user_code

这里只做一层join,方便后期进行对比,如果效率高,后期都改过来就是了。

2.查看索引的引用情况

我的嵌套sql
在这里插入图片描述
正常的join sql
在这里插入图片描述

从索引的引用和查找行数上来看,两者保持一致。

3.sql执行时间

在这里插入图片描述在这里插入图片描述

从执行时间来看join的执行时间快了0.001s,其实是没什么区别的。

4.总结

嵌套循环在MySQL中看起来跟join效果差不多,但实际上还是join使用场合更多一些,不容易受人质疑。有些数据库和数仓对这种嵌套写法,其实不是很友好,比如hive就只支持一层嵌套。传统的数据库,执行效率还是得看对索引的扫描情况,如果用于线上反复运行,还是需要分析一下,偶尔提取一下报表,影响不大,各位看官,如果不同意见,欢迎评论区留言,也欢迎大家关注公众号造轮子的坦克,可以获取我的个人微信联系方式。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值