我有两张桌子,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 Fiddle 在这里: