在存储过程中,我生成一个键数组,并希望将它与表中的键数组进行比较。比较两个数组以查看它们是否至少有一个匹配的值的最快方法是什么?
到目前为止,我们已尝试过以下方法:
以下是表格的定义:solicitation
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;
key
已编入索引。
答案 0 :(得分:1)
postgresql中的数组运算符非常快。
但请注意,您应使用GIN
索引来提高效果。
大多数情况下,在数据库服务器中执行作业的性能更快,但请注意,如果数据库服务器过载,则创建Web服务器的副本更容易创建数据库副本,因此请尝试将负载从数据库服务器移至Web服务器,以更好地管理Web服务器之间的负载。
答案 1 :(得分:0)
使用数组重叠操作(&&)速度很快但速度慢是由于生成的数组中的NULL。
剥离NULL会使表的大小从数百万秒增加到300毫秒。