Arrays Postgres比较数组的最快方法
在存储过程中,我生成一个键数组,并希望将其与表中的键数组进行比较。比较两个数组以查看它们是否至少有一个值匹配的最快方法是什么 到目前为止,我们已经尝试了以下方法:Arrays Postgres比较数组的最快方法,arrays,postgresql,Arrays,Postgresql,在存储过程中,我生成一个键数组,并希望将其与表中的键数组进行比较。比较两个数组以查看它们是否至少有一个值匹配的最快方法是什么 到目前为止,我们已经尝试了以下方法: 循环生成的密钥并将其与密钥字段进行比较(慢速) 在数组上使用数组操作重叠(&&) 以下是表的定义:征求 id bigint NOT NULL DEFAULT nextval('id_seq'::regclass), type_id bigint, name character varying(2000), key characte
- 循环生成的密钥并将其与密钥字段进行比较(慢速)
- 在数组上使用数组操作重叠(&&)
征求
id bigint NOT NULL DEFAULT nextval('id_seq'::regclass),
type_id bigint,
name character varying(2000),
key character varying[],
status bigint
存储过程中的示例代码
-- keys = list of generated keys
FOR _id, _name, _type IN
SELECT rec.eid, rec.domain, rec.name, rec.type_id
from solicitation rec
where rec.key && _keys
and rec.status in (1201, 1202, 1241)
LOOP
...
END LOOP;
键
已编制索引 postgresql中的数组运算符非常快
但请注意,您应该使用GIN
索引来提高性能
大多数情况下,在DB server中执行作业的性能更快,但请注意,如果数据库服务器过载,则创建web服务器的副本比创建数据库副本更容易,因此请尝试将负载从DB服务器移动到web服务器,以便更好地跨web服务器管理负载。使用阵列重叠操作(&&&)速度很快,但速度减慢是由于生成的数组中存在空值
对于数百万的表大小,去掉空值将性能从6秒提高到300毫秒。我们已经在使用GIN索引了。问题是生成的密钥数组中有空值,这大大降低了性能