GPDB在进行join查询时,可能会产生Motion结点
根据官方文档,总共有这几种Motion:

  1. redistribute 重分布(用hash取模的方法把join字段重分布到各个segment,相当等于生成了一张分布键为join字段的临时表)
  2. explicit redistribute 精确的重分布(待查资料)
  3. broadcast 广播(把一张表的数据全部复制到所有segmeent上,一般做小表广播)
  4. gather 汇总(汇总到master的操作,不一定有,比如create table as select语句,只需要分发数据到各个segment即可)

根据参考资料1我的理解:

  1. join两边的字段都是分布键,没有motion操作。这个很好理解,A表和B表分布键相同的值都在同一个segment上了,不需要转移数据
  2. 大表join大表,其中一个join字段是分布键,另一个不是,此时非分布键的表会被重分布。这个也好理解,广播是数据量*segment数的代价,但重分布是1个数据量的代价。重分布后, A表和B表相同值的行都在同一个segment上。
  3. 小表join大表,其中小表用了分布键,大表不用分布键,此时会广播小表。那为什么不会重分布小表呢?因为小表的join条件已经是分布键了,重分布后的数据不会改变的,所以只能对小表进行广播。而无论对大表进行重分布或广播,代价都要比广播小表高得多
  4. 小表join大表,其中小表不用分布键,大表用分布键,此时重分布小表,毫无疑问
  5. 大表join大表,其中一个不用分布键,此时重分布不使用分布键的表
  6. 两张表的join条件都不是分布键,此时重分布A表+重分布B表代价最低

参考资料:

  1. https://yq.aliyun.com/articles/60870
  2. https://yq.aliyun.com/articles/57822
  3. http://blog.sina.com.cn/s/blog_3fcc38fc010170e8.html
  4. https://gpdb.docs.pivotal.io/4320/ref_guide/sql_commands/EXPLAIN.html

最新文章

  1. 《UNIX环境高级编程第三版》apue.h等源码文件的编译安装
  2. 【Android】Android Camera实时数据采集及通过MediaCodec硬编码编码数据的流程
  3. MongoDB 优点
  4. iOS应用架构谈(三):View层的组织和调用方案(下)
  5. JQ 全选设定与设置选中
  6. 移动端 ios 长按复制兼容方案
  7. vim 多窗口
  8. 我的PHP之旅--XML初步
  9. 如何理解 Redux?
  10. windows7所有版本
  11. 微软在.NET官网上线.NET 架构指南频道
  12. 开源API测试工具 Hitchhiker v0.6更新 - 改进压力测试
  13. Objective-C与Java类的一些区别
  14. poj3468 线段树的懒惰标记
  15. PostMan打不开怎么解决
  16. 解决eclipse+adt出现的 loading data for android 问题
  17. Go语言使用Beego的ORM插入Mysql后,时区不一致的解决方案
  18. 解决 iOS7 通过tag 找不到 UITableViewCell 的子控件(转)
  19. 去除input的默认样式
  20. C#笔记 -- 协变、逆变

热门文章

  1. 【原创】rman 全库备份脚本
  2. 状压DP复习
  3. luogu P4430 小猴打架(prufer编码与Cayley定理)
  4. Virtualenv入门基础教程
  5. Python 线程高级篇 threading 模块的使用
  6. 浅说套接字socket做个小小的监控
  7. vue源码之响应式数据
  8. 中国象棋程序的设计与实现(六)--N皇后问题的算法设计与实现(源码+注释+截图)
  9. Inter-partition communication in multi-core processor
  10. java 基本类型、包装类、字符串之间的转换