【发布时间】:2021-06-08 22:54:53
【问题描述】:
看postgres函数array_position(anyarray, anyelement [, int])
我的问题类似,但我正在寻找大于元素的数组中第一个值的位置。我在小数组上运行它,但非常大的表。
这行得通:
CREATE OR REPLACE FUNCTION arr_pos_min(anyarray,real)
RETURNS int LANGUAGE sql IMMUTABLE PARALLEL SAFE AS
'select array_position($1,(SELECT min(i) FROM unnest($1) i where i>$2))';
array_position 利用了我的数组是有序的这一事实,但第二部分没有。而且我觉得第二部分可能只是返回位置而无需重新查询。
我的数组只有 100 个元素长,但我必须运行数百万次,因此需要寻找性能提升。
建议表示赞赏。
【问题讨论】:
-
好吧,
min()并不真正关心订单。无论如何它都会查看所有值并返回最小值 -
不相关,但是:SQL函数可以使用参数名,不需要使用过时的$1和$1引用参数位置
标签: arrays postgresql query-optimization