我有 postgresql 查询,我在其中检查两个数组的交集长度。我的查询的非常简化版本如下所示:
SELECT array_length(users.array & Array[1,2,3,4]) from users;
它是更大查询的一部分,但这在这里并不重要。它在我的本地数据库上运行良好,但在 heroku 上,intarray 扩展名未列入白名单。
我发现了与数组相交的简单函数,但与&
运算符相比,它相当慢。
CREATE OR REPLACE FUNCTION array_intersect(anyarray, anyarray)
RETURNS anyarray AS $$
SELECT ARRAY( SELECT * FROM UNNEST( $1 ) WHERE UNNEST = ANY( $2 ) );
$$ LANGUAGE sql;
在我的表的大约 2000 条记录上,使用&
运算符需要大约50ms
和使用上面的函数需要大约150ms
。我想尽可能多地比较记录,但这个函数的扩展性不如'&'运算符。
有什么方法可以更快地做到这一点或将 intarray 添加到heroku?