我有一個聚合,其實作是用 C 定義的。例如,狀態函式的相應 sql 模式如下所示:
CREATE OR REPLACE FUNCTION "my_aggregate_sfunc"(
"internal_state" INTERNAL,
"next_data_value" integer
) RETURNS INTERNAL
IMMUTABLE PARALLEL SAFE
LANGUAGE c
AS 'MODULE_PATHNAME', 'my_aggregate_sfunc';
我理解背后的想法IMMUTABLE:它告訴 postgres 回傳值僅來自引數,并且該函式沒有副作用。
我也明白優化器可以根據函式執行某些優化IMMUTABLE。
我想了解這對于用 C 實作的聚合在實踐中意味著什么。這些優化機會是否真的存在?如果函式定義為 ,性能會有多大不同VOLATILE?
uj5u.com熱心網友回復:
聚合中狀態變化函式的波動性對性能完全沒有影響。
函式波動性在查詢中有所不同,例如
SELECT ... FROM tab WHERE col = func(42);
使用STABLEorIMMUTABLE函式,該函式將只執行一次,而VOLATILE必須為每個表行執行一個函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/418805.html
標籤:
