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