首页 > 其他分享 >MapJoin与小表驱动大表

MapJoin与小表驱动大表

时间:2022-09-21 09:12:03浏览次数:38  
标签:MapJoin 小表 hive mapJoin 驱动 大表

SQL常说用小表驱动大表,网上很多帖子也是说hive也是小表驱动大表。

 

 

但实际用expalin执行计划测的时候,大表写在前面执行了mapjoin,小表写前面反而没采用MapJoin,为了确定确实是表大小的顺序原因,我更改了set hive.mapjoin.smalltable.filesize; 将其调小,则两种方案都无法mapJoin。

这是不是意味着:hive中为了采用MapJoin优化,在leftJoin时确实应该将大表写在前面,这和业务SQL数据库是相反了?

 

 

答:

保留大表还是小表取决于业务逻辑,并不是语法上可以优化的。

mapJoin并不存在什么书写顺序,只要开启了mapJoin,在成本评估合适的时候就会启用MapJoin。这具体表现在,InnerJoin不关心书写顺序;LeftJoin在小表在左侧,即小表完全保留的时候不会开启MapJoin,因为会产生很多空值连接的键值对,后续依旧要通过一个Reduce计算去除,且数据量很大不划算;RighJoin同理。  所谓的“小表驱动大表”和这里的MapJoin并不是一个概念,他指的是单服务器将小表加载内存,大表建立索引的过程;和这里的MapJoin减少网络传输,避免数据倾斜是不同的,设计理念就不同。

标签:MapJoin,小表,hive,mapJoin,驱动,大表
From: https://www.cnblogs.com/averyve/p/16714383.html

相关文章

  • MySQL 大表优化方案,收藏了细看
    当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化:单表优化除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运......
  • Mysql 大表在线DDL修改表全文索引解决方式
    1.添加主键索引ALTERTABLEtable_nameADDPRIMARYKEY(column),Algorithm=Inplace;2.添加唯一索引ALTERTABLEtable_nameADDUNIQUE(column),Algorithm=Inplac......
  • tidb 小表缓存
    TiDB在v6.0.0版本中引入了缓存表功能。该功能适用于频繁被访问且很少被修改的热点小表,即把整张表的数据加载到TiDB服务器的内存中,直接从内存中获取表数据,避免从TiKV......