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;