Postgresql

在 Postgresql 儲存過程中正確使用 VOLATILE COST(和 ROWS)指示

  • April 2, 2021

在查看 and 的幾個範例時pl/pythonpl/pgsql我看到了很多(但不是全部)使用volatile cost.

IE:

CREATE OR REPLACE FUNCTION my_function()
RETURNS setof record AS
$BODY$
-- code
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

搜尋有關volatile cost我發現(乍一看)的更多資訊,大約至少 90% 的 Web 範例都在volatile cost 100使用volatile cost 1. (因為rows它是 1000)。

據我了解,此指示有助於查詢計劃優化器決定如何在短路布爾操作中設置優先級。

如果我開始估計costrows為我的每個儲存過程提供估計,是不是過早的優化?我應該只在我想優化某些查詢時才這樣做嗎?選擇成本的好價值是一門藝術嗎?

我知道 command explain,我還沒有學過。這個命令對估計有幫助cost嗎?

VOLATILE完全獨立於COST

第一個定義函式波動性並且VOLATILE是預設值,因此可以省略。替代方案是STABLEIMMUTABLE

後者僅在與COST參數組合時有效,例如COST 500. 預設是COST 100可以省略的。它聲明結果的每行成本,查詢計劃程序使用它來查找最便宜的計劃。如果您不知道自己在做什麼,只需將其保留為預設值即可。

閱讀非常精美的手冊,從章節開始CREATE FUNCTION

引用自:https://dba.stackexchange.com/questions/37396