我对Postgres触发器比较陌生。我在www.postgresql.org看到了一个触发器的例子,但是我不理解最后这个 LANGUAGE plpgsql VOLATILE COST 100;
是什么意思。
这一行代码有什么用?
我在这个问题相关的Stack Overflow讨论区看到了类似的问题,但只解释了volatile
,请问这里的cost 100
和language
是什么意思?
我对Postgres触发器比较陌生。我在www.postgresql.org看到了一个触发器的例子,但是我不理解最后这个 LANGUAGE plpgsql VOLATILE COST 100;
是什么意思。
这一行代码有什么用?
我在这个问题相关的Stack Overflow讨论区看到了类似的问题,但只解释了volatile
,请问这里的cost 100
和language
是什么意思?
语言 plpgsql 可变成本 100;
语言:用于创建 PostgreSQL 存储过程的编程语言。这里使用的是 plpgsql。
在介绍可变性和成本之前,需要先了解 '查询优化器',我们会提供这些信息给查询优化器,以便它确定执行给定查询的最有效方式。
可变性:在 PostgreSQL 中,每个函数都有一个可变性分类,其中可变是可变性分类之一。可变函数可以做任何事情,包括修改数据库。它是默认值,因此可以省略。
成本 100:成本与可变性完全独立。它声明结果每行的成本,查询计划器用它来查找最便宜的计划。默认值为 COST 100,也可以省略。最好将其保留为默认值。
在这些语句中,我们向查询优化器提供有关函数的信息。这里包括我们使用的语言、函数的可变性以及结果每行的成本。
您可以在Postgres中使用更多的编程语言来编写存储过程。所以强制属性LANGUAGE指定了使用的语言 - plpgsql, sql, plpython, plperl, ...
这些函数对于优化器来说是一个黑盒子 - 优化器不知道里面有什么和这段代码有多么昂贵。优化器可以选择SQL查询将如何计算,并且它可以倾向或最小化某些函数的评估。低成本的函数是首选的,而高成本的函数则会受到惩罚。COST是+/-值,表示函数的昂贵程度(函数的快慢)。几乎所有内置函数的COST都为1,pgAdmin对于自定义函数使用COST 100 - 这表明plpgsql函数比内置函数更慢。COST不是线性的 - 所以这并不意味着plpgsql函数比内置函数慢100倍。