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

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