Postgresql
在 Postgresql 儲存過程中正確使用 VOLATILE COST(和 ROWS)指示
在查看 and 的幾個範例時
pl/python
,pl/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)。據我了解,此指示有助於查詢計劃優化器決定如何在短路布爾操作中設置優先級。
如果我開始估計
cost
或rows
為我的每個儲存過程提供估計,是不是過早的優化?我應該只在我想優化某些查詢時才這樣做嗎?選擇成本的好價值是一門藝術嗎?我知道 command
explain
,我還沒有學過。這個命令對估計有幫助cost
嗎?
VOLATILE
完全獨立於COST
。第一個定義函式波動性並且
VOLATILE
是預設值,因此可以省略。替代方案是STABLE
和IMMUTABLE
。後者僅在與
COST
參數組合時有效,例如COST 500
. 預設是COST 100
可以省略的。它聲明結果的每行成本,查詢計劃程序使用它來查找最便宜的計劃。如果您不知道自己在做什麼,只需將其保留為預設值即可。閱讀非常精美的手冊,從章節開始
CREATE FUNCTION
。