mysql 谓词下推_sql中join的on和where操作引发的谓词下推优化

谓词下推操作,其实Hive也陆陆续续做了一定的优化操作,但是有些地方还需要我们自己人为的去进行优化,

1.在join操作中,针对一般的单表过滤条件,操作的时候尽量直接进行谓词下推操作(即把过滤条件直接放到子查询当中),不要把过滤条件在放到on后面的where条件中,防止查询的数据不准确性。

2.在join操作中,涉及到在on后面进行where判断(主要涉及到双表或者多表条件判断,比如:on a.id=b.id where a.dt=>b.start_dt and a.dt<=b.end_dt),或者case when判断多表条件操作,或者select *from a where id in(select id from b)tmp等操作时。

针对上述的几种情况来说,其实就是发生了双表(或者多表的操作判断),如果采用上述操作计算的话,则都会产生大量的map或者reduce操作,极大的影响执行效率,

因为这种不等值连接,或者in(子查询)等,都会进行双表(或者多表)全扫描操作,不会进行谓词下推操作。

针对上述情况,暂时的处理的方法,使用的是shell脚本传参变量,然后进行操作。当然如果数据量不大的情况下,减少脚本的复杂性等,直接使用上正常述操作就行

start_dt=(`mysql -A dbname -hdb_host -udb_user -pdb_pwd -ss -e 'SELECT start_dt FROM b"'`)

select * from a where dt>='${start_dt}' ;

谓词下推参考:

feab2ea193a6540352570a42e8f6cdc3.png

参考:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值