hard parse?

Started by Peter Koukoulisover 8 years ago3 messagesgeneral
Jump to latest
#1Peter Koukoulis
pkoukoulis@gmail.com

Hi

I have a query where a filter would always be negative, how many steps, out
these:

- parsing and syntax check
- semantic analysis
- transformation process (query rewrite based on system or user-defined
rules)
- query optimization
- execution

would be performed or not? Also, where in the documentation can I found out
which of the above phases would be performed?

For example, for a query such as the following:

select x,y from test1 where 1=0;

Thanks
P

#2David G. Johnston
david.g.johnston@gmail.com
In reply to: Peter Koukoulis (#1)
Re: hard parse?

On Thu, Sep 21, 2017 at 5:48 AM, Peter Koukoulis <pkoukoulis@gmail.com>
wrote:

Hi

I have a query where a filter would always be negative, how many steps,
out these:

- parsing and syntax check
- semantic analysis
- transformation process (query rewrite based on system or
user-defined rules)
- query optimization
- execution

would be performed or not? Also, where in the documentation can I found
out which of the above phases would be performed?

For example, for a query such as the following:

select x,y from test1 where 1=0;

I'm inferring behavior here but...​

​All of them. You are still going to get a result set with zero records
and the correct column structure. i.e., "Execution". None of the other
stuff can be skipped in getting to engine to that point. With a "always
false" predicate and that simple of a query structure most of the other
stuff, including execution, is probably performed is seemingly zero time
but it still has to work through that step of the process - if nothing else
than to move through an if-branch to decide that nothing material needs to
be done.

David J.

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: David G. Johnston (#2)
Re: hard parse?

"David G. Johnston" <david.g.johnston@gmail.com> writes:

On Thu, Sep 21, 2017 at 5:48 AM, Peter Koukoulis <pkoukoulis@gmail.com>
wrote:

I have a query where a filter would always be negative, how many steps,
out these:

- parsing and syntax check
- semantic analysis
- transformation process (query rewrite based on system or
user-defined rules)
- query optimization
- execution

would be performed or not? Also, where in the documentation can I found
out which of the above phases would be performed?

All of them.

Yeah. The question is more usefully formulated as "how much will the
query optimizer collapse a query with a constant-false condition"?
You can answer that with EXPLAIN, eg.

regression=# create table test1 (x int, y int);
CREATE TABLE
regression=# explain select x,y from test1 where 1=0;
QUERY PLAN
------------------------------------------
Result (cost=0.00..0.00 rows=0 width=8)
One-Time Filter: false
(2 rows)

In this case the answer is "pretty far" --- you get a valid but
dummy plan, which will just exit without returning any rows.

regards, tom lane

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general