24 messages in org.postgresql.pgsql-jdbcRe: Limit vs setMaxRows issue
FromSent OnAttachments
Sebastiaan van ErkJun 21, 2006 2:11 am 
Dave CramerJun 21, 2006 7:56 am 
Sebastiaan van ErkJun 21, 2006 8:48 am 
Kris JurkaJun 21, 2006 8:59 am 
A.M.Jun 21, 2006 9:09 am 
Tom LaneJun 21, 2006 9:46 am 
Oliver JowettJun 21, 2006 3:52 pm 
Sebastiaan van ErkJun 22, 2006 1:35 am 
Mark LewisJun 22, 2006 9:15 am 
David WallJun 22, 2006 9:36 am 
Sebastiaan van ErkJun 22, 2006 1:13 pm 
Marc HerbertJul 10, 2006 1:50 am 
Marc HerbertJul 10, 2006 1:59 am 
Marc HerbertJul 10, 2006 2:05 am 
Oliver JowettJul 10, 2006 11:32 pm 
Oliver JowettJul 10, 2006 11:37 pm 
Marc HerbertJul 11, 2006 2:48 am 
Marc HerbertJul 11, 2006 3:00 am 
Oliver JowettJul 11, 2006 3:45 am 
Marc HerbertJul 11, 2006 5:14 am 
Oliver JowettJul 11, 2006 10:01 pm 
Marc HerbertJul 12, 2006 3:22 am 
Markus SchaberJul 12, 2006 3:59 am 
Marc HerbertJul 20, 2006 11:52 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:Re: Limit vs setMaxRows issueActions...
From:Marc Herbert (Marc@continuent.com)
Date:Jul 11, 2006 2:48:28 am
List:org.postgresql.pgsql-jdbc

Oliver Jowett <oli@opencloud.com> writes:

Marc Herbert wrote:

If planning is done at time of creation of the PreparedStatement object (reminder: the example given above has no parameters), then the setMaxRows() call will come too late whatever is the protocol change. I mean: no protocol change can go back in time and "optimize" by not doing useless work already done. Thanks in advance for pointing out my mistake(s) here.

We do not special-case the no-parameters case, so it's handled just like all the other cases: the query is parsed and planned immediately before execution.

OK, I should not have put this "reminder" above. I thought I would simplify the discussion but it did not.

According to: http://www.postgresql.org/docs/8.1/interactive/sql-prepare.html as well as to any other non-DB specific, similar documentation, the server is able to plan the query at parse time BEFORE receiving any actual parameter. Connection.preparedStatement()'s Javadoc calls this "pre-compilation" (and it's optional).

the query is parsed and planned immediately before execution.

Hum, interesting. Looks like "lazy prepared" statement, no pre-compilation? If you delay parsing & planning then of course you would not need to go back in time to add late optimizations...

However, what about the following executions of the same and now already prepared and planned statement? Now you would have to go back in time to perform any .setMaxRows() optimization, right?

I assume here that it's the query planning phase that would benefit from any .setMaxRows() optimization, correct me if I'm wrong.

We also avoid an extra round-trip by doing it at that point.

Then you also avoid any latency benefit that _could_ arise thanks to pre-compilation. At least for the first execution.

If you're interested in the details of this, the driver source code is really your best reference..

Sure, but for such high-level architectural questions you can easily understand that I prefer to read your enlightning explanations.