我正在为PostgresQL 9.1开发Pg/PLSQL函数.当我在SQL查询中使用变量时,优化器会构建错误的执行计划.但是如果我用它的值替换变量,那么计划就可以了.例如:
v_param := 100;
select count(*)
into result
from <some tables>
where <some conditions>
and id = v_param
Run Code Online (Sandbox Code Playgroud)
在3s内完成
和
select count(*)
into result
from <some tables>
where <some conditions>
and id = 100
Run Code Online (Sandbox Code Playgroud)
在300ms内完成
在第一种情况下,优化器为任何v_param值生成固定计划.
在第二种情况下,优化器基于指定的值生成计划,尽管不使用计划缓存,但它的效率明显更高.
是否可以使优化器在没有动态绑定的情况下生成计划,并在每次执行查询时生成计划?