Postgres比较数组的最快方法

时间:2012-12-14 15:33:03

标签: arrays postgresql

在存储过程中,我生成一个键数组,并希望将它与表中的键数组进行比较。比较两个数组以查看它们是否至少有一个匹配的值的最快方法是什么?

到目前为止,我们已尝试过以下方法:

  • 循环生成的密钥并将它们与密钥字段(慢)进行比较
  • 在数组
  • 上使用数组操作重叠(&&)

以下是表格的定义: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已编入索引。

2 个答案:

答案 0 :(得分:1)

postgresql中的数组运算符非常快。

但请注意,您应使用GIN索引来提高效果。

大多数情况下,在数据库服务器中执行作业的性能更快,但请注意,如果数据库服务器过载,则创建Web服务器的副本更容易创建数据库副本,因此请尝试将负载从数据库服务器移至Web服务器,以更好地管理Web服务器之间的负载。

答案 1 :(得分:0)

使用数组重叠操作(&&)速度很快但速度慢是由于生成的数组中的NULL。

剥离NULL会使表的大小从数百万秒增加到300毫秒。