Re: Optimizer + bind variables

Поиск
Список
Период
Сортировка
От Craig Ringer
Тема Re: Optimizer + bind variables
Дата
Msg-id 4AF0C014.4090000@postnewspapers.com.au
обсуждение исходный текст
Ответ на Optimizer + bind variables  (David Kerr <dmk@mr-paradox.net>)
Ответы Re: Optimizer + bind variables  (David Kerr <dmk@mr-paradox.net>)
Список pgsql-performance
David Kerr wrote:
> Does/is it possible for the PG optimizer come up with differnet plans when
> you're using bind variables vs when you send static values?

Yes, if the bind variable form causes your DB access driver to use a
server-side prepared statement. Pg can't use its statistics to improve
its query planning if it doesn't have a value for a parameter when it's
building the query plan.

Whether a server-side prepared statement is used or not depends on how
you're connecting to the database - ie your DB access driver and
version. If you're using JDBC, I *think* the JDBC driver does parameter
placement client-side unless you're using a JDBC prepared statement and
the JDBC prepared statement is re-used several times, at which point it
sets up a server-side prepared statement. AFAIK otherwise it uses
client-side (or Pg protocol level) parameter placement.

> if it's possible for the plan to be different how can i generate an
> xplan for the bind version?

xplan = explain? If so:

Use PREPARE to prepare a statement with the params, then use:

EXPLAIN EXECUTE prepared_statement_name(params);

eg:

x=> PREPARE blah AS SELECT * FROM generate_series(1,100);
PREPARE
x=> EXPLAIN EXECUTE blah;
                               QUERY PLAN
------------------------------------------------------------------------
 Function Scan on generate_series  (cost=0.00..12.50 rows=1000 width=4)
(1 row)

--
Craig Ringer

В списке pgsql-performance по дате отправления:

Предыдущее
От: "Kevin Grittner"
Дата:
Сообщение: Re: Queryplan within FTS/GIN index -search.
Следующее
От: David Kerr
Дата:
Сообщение: Re: Optimizer + bind variables