【发布时间】:2019-08-03 22:01:52
【问题描述】:
我在 Ubuntu 18.04.1 上使用 PostgreSQL 10.9。以下存储过程确实将数组作为输入和变量 beta。两个输入变量都用于计算聚合索引。数组可以有不同的长度。 由于我在另一个查询中使用了数千次此函数,因此此函数的性能非常重要。我删除了一个 CTE 并将其更改为子查询,这有点帮助。但是我找不到任何其他方法来进一步提高性能。
CREATE OR REPLACE FUNCTION public.part_accessibility_index(traveltime_array NUMERIC[], beta numeric)
RETURNS SETOF NUMERIC
LANGUAGE sql
AS $function$
SELECT COALESCE(sum_index,0)
FROM
(
SELECT sum(part) sum_index
FROM (
SELECT EXP(UNNEST(traveltime_array)*(beta)) AS part
)
index_part
)
sum_index;
$function$
函数可以这样调用
SELECT part_accessibility_index(ARRAY[100.2,323.9,1323.313,432.232,1100.22,144.1], -0.001)
我得到以下查询计划。
ProjectSet (cost=0.00..5.27 rows=1000 width=32) (actual time=0.180..0.184 rows=1 loops=1)
-> Result (cost=0.00..0.01 rows=1 width=0) (actual time=0.000..0.001 rows=1 loops=1)
Planning time: 0.022 ms
Execution time: 0.197 ms
如前所述,查询并不是很慢,但可能仍有改进方法。我很乐意为您提供任何帮助!
【问题讨论】:
标签: sql postgresql performance stored-procedures