Re: NOT IN subquery optimization

Finnerty, Jim <jfinnert@amazon.com>

From: Jim Finnerty <jfinnert@amazon.com>
To: pgsql-hackers@postgresql.org
Date: 2019-02-21T01:53:25Z
Lists: pgsql-hackers
re: The idea that's been kicked around in the past is to detect whether the
subselect's output column(s) can be proved NOT NULL, and if so, convert
to an antijoin just like NOT EXISTS

basically, yes.  this will handle nullability of both the outer and inner
correlated expression(s), multiple expressions, presence or absence of
predicates in the WHERE clause, and whether the correlated expressions are
on the null-padded side of an outer join.  If it is judged to be more
efficient, then it transforms the NOT IN sublink into an anti-join.

some complications enter into the decision to transform NOT IN to anti-join
based on whether a bitmap plan will/not be used, or whether it will/not be
eligible for PQ.



-----
Jim Finnerty, AWS, Amazon Aurora PostgreSQL
--
Sent from: http://www.postgresql-archive.org/PostgreSQL-hackers-f1928748.html


Commits

  1. Check we don't misoptimize a NOT IN where the subquery returns no rows.