JOIN操作-go语言并发之道带目录

时间:2024-07-02 23:40:40
【文件属性】:

文件名称:JOIN操作-go语言并发之道带目录

文件大小:452KB

文件格式:PDF

更新时间:2024-07-02 23:40:40

性能、优化

4.3JOIN操作   在编写带有 join 操作的代码语句时,应该将条目少的表/子查询放在 Join 操作符的左边。 因为 在 Reduce 阶段,位于 Join 操作符左边的表的内容会被加载进内存,载入条目较少的表 可以有效减少 OOM(out of memory)即内存溢出。所以对于同一个 key 来说,对应的 value 值小的放前,大的放 后,这便是“小表放前”原则。 若一条语句中有多个 Join,依据 Join 的条件相同与否,有不同的处 理方法。 4.3.1JOIN原则   在使用写有 Join 操作的查询语句时有一条原则:应该将条目少的表/子查询放在 Join 操作符的左 边。原因是在 Join 操作的 Reduce 阶段,位于 Join 操作符左边的表的内容会被加载进内存,将条目 少的表放在左边,可以有效减少发生 OOM 错误的几率。对于一条语句中有多个 Join 的情况,如果 Join 的条件相同,比如查询: INSERT OVERWRITE TABLE pv_users SELECT pv.pageid, u.age FROM page_view p JOIN user u ON (pv.userid = u.userid) JOIN newuser x ON (u.userid = x.userid); 如果 Join 的 key 相同,不管有多少个表,都会则会合并为一个 Map-Reduce 一个 Map-Reduce 任务,而不是 ‘n’ 个 在做 OUTER JOIN 的时候也是一样   如果 Join 的条件不相同,比如:  INSERT OVERWRITE TABLE pv_users SELECT pv.pageid, u.age FROM page_view p JOIN user u ON (pv.userid = u.userid) JOIN newuser x on (u.age = x.age);   Map-Reduce 的任务数目和 Join 操作的数目是对应的,上述查询和以下查询是等价的: 


网友评论