Eva*_*oll 3 postgresql performance optimization execution-plan functions
在这个答案中, Erwin 将IMMUTABLE
函数分解为可以内联的函数和不能内联的函数。他有一个例子to_char()
,表明IMMUTABLE
函数 overto_char()
实际上会更慢。
不过这很有趣,因为我什至不知道to_char()
不是IMMUTABLE
。此外,我不知道这IMMUTABLE
会让任何事情变得更慢。我现在的问题是,如何确定标记为IMMUTABLE
内联的函数是否被内联?
由于它改变了实际的执行计划,您可以从EXPLAIN (ANALYZE, VERBOSE)
(除其他外)的输出中看出: 示例:
EXPLAIN (ANALYZE, VERBOSE) SELECT my_func(col) FROM tbl;
Run Code Online (Sandbox Code Playgroud)
我从你所指的答案中简化并改编了小提琴:
db<>在这里摆弄
第一个函数是内联的,因此您会在输出中看到内联的表达式:
Run Code Online (Sandbox Code Playgroud)Output: (to_char((d)::timestamp with time zone, 'MMDD'::text))::integer
第二个函数没有内联,因此您会在输出中看到函数调用:
Run Code Online (Sandbox Code Playgroud)Output: f_mmdd_tc_i(d)
准确地说:这表明该函数是否已在测试查询中内联。如果没有,那并不一定证明它不能(在不同情况下)。
并且测试并不仅限于IMMUTABLE
任何方式的功能。
归档时间: |
|
查看次数: |
312 次 |
最近记录: |