SQL中on&where的区别

写在前面

今天看见群里有小伙伴在问sql中on&where有啥区别,似乎都能实现过滤数据的效果,但又感觉又不太一样,始终有点理不清。这不,
在这里插入图片描述
这里简单记录下我的理解。如果有误,欢迎指正~笔芯

结论就是:
1.on先过滤数据再进行表的连接,where先连表得到临时查询结果 最后再对结果进行过滤
2.on 后面的过滤条件只会影响当前表的行数,而如果把这个从表的筛选条件 放在了where里面,这样就会影响主表的返回行数

所以,也是比较多的场景是:拿left join 举例,如果你需要返回左表的全部数据,这样的话,你就不能把从表的筛选条件放到where里面,只能放在自己的on后面先过滤

还有一种场景就是:把主表的筛选条件放置到on后面,这样得到的结果 == 等价 == 将主表筛选条件放到where里面了
但是这样的是性能应该是会高一些,因为上面说到,on会先过滤数据再连表。其实这里是有一个谓词下推的概念。

谓词下推

简单来说就是,就是在 TableScan 每一行数据的时候,判断这行数据是否是 需要 的数据。尽早的进行过滤掉,减少IO的量(从而降低磁盘IO,网络IO,分区间数据移动,节点之间数据移动的IO等)。

再简单提一下:要提升IO效率:1.减少IO次数 2.减少IO量

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值