Обсуждение: [GENERAL] hard parse?
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
HiI 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.
"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