小编Pas*_*eux的帖子

PostgreSQL:与 sql 相比,plpgsql 语言的相同请求速度较慢

我是 PostgreSQL 的新手,我面临着有关表函数性能的问题。我需要做的是相当于 MSSQL 中的存储过程。经过一些研究,我发现表函数是可行的方法,所以我举了一个例子来使用 plpgsql 创建我的函数。

通过比较执行时间,使用函数比直接调用查询慢 2 倍(查询在函数中完全相同)。

经过一番挖掘,我发现在我的函数中使用 SQL 语言可以大大缩短执行时间(与调用查询的时间完全相同)。阅读本文后,我明白 plpgsql 增加了一点开销,但差异太大而无法解释。

因为我没有使用任何 plpgsql 功能,所以这个解决方案对我来说很好,完全有道理。但是,我想了解为什么会有这种差异。如果我比较执行计划,与执行 GroupAggregate 和一些预排序的 SQL 版本相比,plpgsql 版本执行一些 HashAggregate 和顺序搜索......我确实按照 Laurenz Albe 的建议使用了 auto_explain,我在最后添加了两个执行计划.

为什么相同查询的执行计划与语言的唯一区别如此不同?而且,即使是 SUM 的结果(见下面我的请求)也有显着差异。我知道我使用的是浮点值,因此每次调用之间的结果可能略有不同,但在这种情况下,查询和函数之间的差异约为 ~3,这是出乎意料的(~10001 vs ~9998)。

在使用 2 个表和 2 个函数重现问题的代码下方。

请注意,我使用的是 PostgreSQL 12。

任何解释表示赞赏:) 谢谢。

-- Step 1: Create database

-- Step 2: Create tables
-- table1
CREATE TABLE public.table1(area real, code text COLLATE pg_catalog."default");

-- table 2
CREATE TABLE public.table2(code text COLLATE pg_catalog."default" NOT NULL, surface real, CONSTRAINT table2_pkey …
Run Code Online (Sandbox Code Playgroud)

postgresql performance plpgsql

6
推荐指数
1
解决办法
80
查看次数

标签 统计

performance ×1

plpgsql ×1

postgresql ×1