“LANGUAGE plpgsql VOLATILE COST 100”在函数中意味着什么

时间:2014-02-10 09:32:44

标签: postgresql triggers plpgsql

我是Postgres触发器的新手。我在www.postgresql.org上看到了一个触发器示例,我不明白触发器函数末尾的LANGUAGE plpgsql VOLATILE COST 100;是什么。

这条线的用途是什么?

我看到了与此相关的问题what does “LANGUAGE 'plpgsql' VOLATILE” mean? 但它仅约为volatile,此行中的cost 100language是什么?

2 个答案:

答案 0 :(得分:8)

LANGUAGE plpgsql VOLATILE COST 100;

LANGUAGE:用于在PostgreSQL中创建存储过程的编程语言。 这是plpgsql。

  

(在开始使用volatile和cost之前,首先需要了解一些事情...'查询优化器'我们为此提供这些信息。查询优化器用于确定最有效的执行方式给定的查询。)

VOLATILE:-In PostgreSQL每个函数都有一个波动率分类,volatile是一个波动率分类。 VOLATILE函数可以执行任何操作,包括修改数据库。它是默认值,因此可以省略。

COST 100: - COST完全独立于VOLATILE。它声明结果的每行成本,查询计划程序使用它来查找最便宜的计划。默认值为COST 100,也可以省略。最好将其保留为默认值。

  

在这些声明中,我们提供了有关查询优化器的函数的信息。在这里......使用什么语言,函数的波动性是什么,结果的每行成本是多少。

答案 1 :(得分:7)

您可以在Postgres中使用更多编程语言进行存储过程编程。所以强制性的attribut LANGUAGE指定使用的语言 - plpgsql,sql,plpython,plperl,...

这些函数是优化器的黑盒子 - 优化器不知道里面是什么以及这段代码有多贵。优化器可以选择如何计算SQL查询的方式,它可以优先选择或最小化某些功能的评估。优选低成本的功能,并且高成本的功能受到惩罚。 COST是+/-值,功能如何昂贵(功能如何快或慢)。几乎所有内置函数都有COST 1,pgAdmin使用COST 100作为自定义函数 - 它显示了一个期望值,因此plpgsql函数将比内置函数慢。 COST不是线性的 - 所以它并不意味着plpgsql函数比内置函数慢100倍。