Yang Zhang <yanghatespam@gmail.com> Tuesday 19 of July 2011 04:07:05
> In (say) Python, I can issue:
>
> psycopg2.connect(...).cursor().execute("select * from account
> where id='00100000006ONCrAAO'")
>
> which on the server results in the following log entries:
>
> 2011-07-18 18:56:08 PDT LOG: duration: 6.112 ms statement:
> select * from account where id='00100000006ONCrAAO'
>
> However, in Java, issuing:
>
> conn.createStatement().executeQuery("select * from account where
> id = '00100000006ONCrAAO'");
>
> results in:
>
> 2011-07-18 18:44:59 PDT LOG: duration: 4.353 ms parse <unnamed>:
> select * from account where id = '00100000006ONCrAAO'
> 2011-07-18 18:44:59 PDT LOG: duration: 0.230 ms bind <unnamed>:
> select * from account where id = '00100000006ONCrAAO'
> 2011-07-18 18:44:59 PDT LOG: duration: 0.246 ms execute
> <unnamed>: select * from account where id = '00100000006ONCrAAO'
>
> Some searching shows that the PG JDBC driver *always* uses prepared
> statements:
> http://postgresql.1045698.n5.nabble.com/JDBC-prepared-statements-amp-serve
> r-side-prepared-statements-td1919506.html
>
> Is there any way to circumvent server prepared statements? If it makes
> a difference, I'm asking regarding PG 8.4 and 9.0. Thanks in advance.
Hi,
At the begining it's looks like your Java call is faster then python, and it's
about 1ms, so it's about 16%. Probably your call could be faster if You use
prepared statement, but...
Your call do not use prepared statements, as You even don't asked for those.
It uses extended query protocol which sends query in few "chunks", parse,
bind, execute - this is needed to allow result set fetches.
Regards,
Radosław Smogura