Re: [GENERAL] Prepared statement performance...

Поиск
Список
Период
Сортировка
От Simpson, Mike W
Тема Re: [GENERAL] Prepared statement performance...
Дата
Msg-id 560796A29B821F40A277973FB5EA300496FA74@slexc1a.server.power.bellhow.com
обсуждение исходный текст
Ответы Re: [GENERAL] Prepared statement performance...  (Aaron Mulder <ammulder@alumni.princeton.edu>)
Список pgsql-jdbc
I've been dying to have usable PreparedStatements in my web application, but
AFAIK this is still not possible given your description below.  Assuming I
can't dedicate a connection to each user (connections are pooled), even
Server Side PreparedStatements are useless (since they fall out of context
when the statement is destroyed, and I can't hold it without holding a
client side PreparedStatement), right?

Imagine an online catalog with millions of records, and we want to support
searching and browsing.  Parsing the initial search query will be quite
expensive if there are a great many columns on the table, but each
subsequent NEXT_PAGE click really just needs to re run the same query with
new params passed to the limit and offset clauses.  Virtually any website
with a database backend will have some variation on this scenario, and
caching the execution plans for these common queries could significantly
improve performance in all these cases.

I agree that server side prepared statements are useful even when we don't
need to bind variables, but unless we have single user systems, neither
definition gets us very far.  Maybe if we could cache prepared statements in
application code and dynamically bind them back to connections on each
request we could make use of this functionality, but I can't see how
recreating the prepared statement will ever pay off with connection pools in
place.

Mike


    Dimtry,

    Server side prepare does not map to jdbc concept of
PreparedStatement and it is important to understand how they are not the
same.

    Server side prepare means that you can parse and plan the statement
once and reexecute it multiple times so:
    select foo from bar;
    becomes
    prepare <name> as select foo from bar;
    execute <name>;
    deallocate <name>;

    This applies to all sql statements. So server side prepared
statements can equally be used for regular JDBC Statement objects as well as
JDBC PreparedStatements.

    JDBC PreparedStatements provide an interface to bind values into a
sql statement.

    Server side prepare provides the ability to reduce the overhead of
parse/plan across muliple executions of a sql statement that may or may not
have bind values.

    They are different even though they both have the word 'prepare' in
their names.

    thanks,
    --Barry



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

Предыдущее
От: "Jeroen Olthof"
Дата:
Сообщение: getObject
Следующее
От: dmitriy
Дата:
Сообщение: jdbc driver question