Обсуждение: [GENERAL] hard parse?

Поиск
Список
Период
Сортировка

[GENERAL] hard parse?

От
Peter Koukoulis
Дата:
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

Re: [GENERAL] hard parse?

От
"David G. Johnston"
Дата:
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.

Re: [GENERAL] hard parse?

От
Tom Lane
Дата:
"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