我有两个表,left2
和right2
。两个表都将很大(1-10M行)。
CREATE TABLE left2(id INTEGER, t1 INTEGER, d INTEGER);
ALTER TABLE left2 ADD PRIMARY KEY (id,t1);
CREATE TABLE right2( t1 INTEGER, d INTEGER, arr INTEGER[] );
ALTER TABLE right2 ADD PRIMARY KEY(t1,d);
我将执行这种类型的查询:
SELECT l.d + r.d,
UNIQ(SORT((array_agg_mult(r.arr)))
FROM left2 l,
right2 r
WHERE l.t1 = r.t1
GROUP BY l.d + r.d
ORDER BY l.d + r.d;
在哪里聚集数组,我使用以下函数:
CREATE AGGREGATE array_agg_mult(anyarray) (
SFUNC=array_cat,
STYPE=anyarray,
INITCOND='{}');
连接数组后,我将使用模块的UNIQ
功能intarray
。有更有效的方法吗?arr
字段上是否有任何索引来加快合并速度(删除重复项)?聚合函数可以直接删除重复项吗?如果有帮助,可以将原始数组视为已排序(并且它们是唯一的)。
SQL小提琴在这里:
right2.arr
像演示模式所建议的那样为NULL吗?您是否需要排序数组?