Performance PostgreSQL中包含数组列条件的高效查询表

Performance PostgreSQL中包含数组列条件的高效查询表,performance,postgresql,indexing,query-optimization,Performance,Postgresql,Indexing,Query Optimization,需要想出一种方法来高效地执行查询,WHERE子句中的and array和integer列按时间戳列排序。使用PostgreSQL 9.2 我们需要执行的查询是: SELECT id from table where integer = <int_value> and <text_value> = any (array_col) order by timestamp limit 1; 我应该如何设计索引/修改查询以使其尽可能高效 非常感谢!如果需要更多信息,

需要想出一种方法来高效地执行查询,
WHERE
子句中的and array和integer列按时间戳列排序。使用PostgreSQL 9.2

我们需要执行的查询是:

SELECT id 
from table 
where integer = <int_value> 
  and <text_value> = any (array_col) 
order by timestamp 
limit 1;
我应该如何设计索引/修改查询以使其尽可能高效


非常感谢!如果需要更多信息,请告诉我,我会尽快更新。

PG可以在数组上使用索引,但您必须使用数组运算符,而不是
=any(array\u col)
使用
array[]
不幸的是,无法在整数列上创建GIN索引,所以您必须为这两列创建两个不同的索引

这并不完全正确,你可以使用或-

现在可以对索引本身运行该操作

SELECT *
FROM table
WHERE id = ? AND array_col @> ?
ORDER BY timestamp;

好的,谢谢。你点的菜怎么样?我该怎么说呢?哦,我错过了。在这种情况下,
索引(整数,时间戳)
应该比
(整数)
(时间戳)
上的两个单独的索引快,但我担心这比我的水平高了一点,所以我不能保证,所以你应该尝试一下。
-- feel free to use GIN
CREATE EXTENSION btree_gist;
CREATE INDEX ON table USING gist(id, array_col, timestamp);
VACUUM FULL ANALYZE table;
SELECT *
FROM table
WHERE id = ? AND array_col @> ?
ORDER BY timestamp;