Я разрабатываю функцию Pg/PLSQL для PostgresQL 9.1. Когда я использую переменные в SQL-запросе, оптимизатор создает плохой план выполнения. Но если я заменю переменную ее значением, план будет в порядке. Например:
v_param := 100;
select count(*)
into result
from <some tables>
where <some conditions>
and id = v_param
выполняется за 3 с
а также
select count(*)
into result
from <some tables>
where <some conditions>
and id = 100
выполняется за 300 мс
В первом случае оптимизатор генерирует фиксированный план для любого значения v_param.
Во втором случае оптимизатор генерирует план на основе указанного значения, и это значительно эффективнее, несмотря на то, что не используется кэширование плана.
Можно ли заставить оптимизатор генерировать план без динамической привязки и генерировать план каждый раз, когда я выполняю запрос?