Re: Removing unneeded self joins

From: Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at>
To: Andrey Lepikhov <a(dot)lepikhov(at)postgrespro(dot)ru>, Hywel Carver <hywel(at)skillerwhale(dot)com>, pgsql-hackers(at)lists(dot)postgresql(dot)org
Cc: Konstantin Knizhnik <knizhnik(at)garret(dot)ru>
Subject: Re: Removing unneeded self joins
Date: 2021-06-30 15:55:21
Message-ID: b17c18d9fd379ce2355c355cdb44787a452961ec.camel@cybertec.at
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Wed, 2021-06-30 at 14:21 +0300, Andrey Lepikhov wrote:
> I think, here we could ask more general question: do we want to remove a
> 'IS NOT NULL' clause from the clause list if the rest of the list
> implicitly implies it?
>
> EXPLAIN (ANALYZE, VERBOSE)
> SELECT *
> FROM a WHERE (X IS NOT NULL) AND (X IS NULL);
> QUERY PLAN
>
> ----------------------------------------------------------------------------------------------------
> Seq Scan on public.a (cost=0.00..15.00 rows=87 width=4) (actual time=0.136..0.136 rows=0 loops=1)
> Output: x
> Filter: ((a.x IS NOT NULL) AND (a.x IS NULL))
> Rows Removed by Filter: 1000
>
> It could reduce a number of selectivity mistakes, but increase CPU
> consumption.
> If we had such a clause analyzing machinery, we could trivially remove
> this unneeded qual.

On the other hand, sometimes something like that can be used to change
the optimizer's estimates to encourage certain plans.

We also don't optimize "ORDER BY x + 0" (which now you can use to prevent
an index scan) or the famous OFFSET 0, partly because it saves planning time,
partly because those can be useful tools.

Generally I have the impression that we are not too keen on spending
planning time on optimizing cases that can be trivially improved by rewriting
the query.

Yours,
Laurenz Albe

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2021-06-30 16:06:47 Re: Preventing abort() and exit() calls in libpq
Previous Message Jacob Champion 2021-06-30 15:47:19 Re: Dependency to logging in jsonapi.c