问题:在GP中有几十张数据量在2000万左右的表,现在有个业务诉求,希望将这些表的字段放到一个大宽表里面,这块有两种方案实现,一种是直接几十表通过主表直接做关联,直接提取字段。另外一种是通过临时表将每个表的字段写到临时表,最终做聚合,想问下这两个方案有啥性能差异么?两种方案是适用场景是什么?
Ps:现阶段是交叉使用,但是最后多表关联还是报错,是说内存不足
【差异性】
做关联,取字段,假定表中规模小还好,如果很大,那关联结果就会成爆炸式增长,网络IO就会爆满。
通过临时表,类似索引的方式,一般是一个结果集比较小,拿到这个结果集去另外一张表中去关联出其他信息,放到service层去处理。这样效率会更快、资源占用会少。
详情参考链接:https://www.zhihu.com/question/68258877/answer/264097272
思路:
1、直接关联。
2、with as 临时表方式,
3、把这三张表分别按各自条件过滤掉生成实表。create tble as 方式,然后三张较小的表关联。
4、存储过程中使用回话级临时表global temporary table这种方式。
建议使用2、3、4思路。
参考链接:https://bbs.csdn.net/topics/390824997
建议考虑测试一下列存储。
https://github.com/citusdata/cstore_fdw
大表会提升性能,列存储表关联查询也会降低内存消耗。