lightdb/postgresql函数分类

  在postgresql中,函数有个不稳定性分类属性,它会影响优化器评估函数的可优化级别、同时也会影响postgresql中并行执行的可行性。

  函数有三种类型:VOLATILE、STABLE以及IMMUTABLE。VOLATILE是函数默认类别,也就是优化器假设函数会修改数据库,不会做任何特定的优化。STABLE可用于基于函数的索引扫描。IMMUTABLE通常用于静态常量的优化。对于一些短小逻辑的函数,典型的是数据字典翻译,但是写在SQL中会导致很复杂的逻辑,应该在创建函数时声明为STABLE。一般来说IMMUTABLE不是特别必要。

  CREATE FUNCTION dup(in int, out f1 int, out f2 text)
    AS $$ SELECT $1, CAST($1 AS text) || ' is text' $$
    LANGUAGE sql IMMUTABLE ;
    
  explain analyze SELECT dup(42) from (select 1 from pg_catalog.generate_series(1, 1000000));

https://www.postgresql.org/docs/13/xfunc-volatility.html

https://www.postgresql.org/docs/current/sql-createfunction.html 

https://www.postgresql.org/docs/13/xfunc-pl.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章