我正在编写一个查询来搜索数组中的元素。使用“for”循环搜索效率不高,因为我的数组有很多元素。因此,查询需要花费大量时间来执行。那么任何人都可以说如何在没有“for”循环的情况下搜索数组中的元素,这应该更快。我必须在搜索时获取索引
谢谢, 卡西卡
我正在编写一个查询来搜索数组中的元素。使用“for”循环搜索效率不高,因为我的数组有很多元素。因此,查询需要花费大量时间来执行。那么任何人都可以说如何在没有“for”循环的情况下搜索数组中的元素,这应该更快。我必须在搜索时获取索引
谢谢, 卡西卡
使用 ANY 运算符:
where 1 = ANY (array_column)
这将返回至少array_column
包含一次该值的所有行。1
如果要检查多个值,请参阅 Clodoaldo 的答案。
如果您在该列上创建索引,这应该非常快。像这样的东西:
create index on the_table using gin (the_array_column);
以下是受此处显示的解决方案的启发:Finding the position of a value in PostgreSQL arrays
with sample_data (pk_column, array_data) as (
values
(1, array[1,2,3,4,5]),
(2, array[7,8,9,11]),
(3, array[5,4,3,2,1]),
(4, array[10,9,8,1,4,6]),
(5, array[7,8,9])
)
select *
from (
select pk_column,
unnest(array_data) as value,
generate_subscripts(array_data, 1) as array_index
from sample_data
where 1 = any(array_data)
) t
where value = 1
内部 where 会将需要完成的总工作减少到仅那些实际包含该值的行。然后外部查询将“分解”数组以获取值的索引。但是使用链接问题中显示的功能实际上可能是您所追求的。
检查包含运算符@>
select array[1,2] @> array[1];
?column?
----------
t
http://www.postgresql.org/docs/current/static/functions-array.html