Re: NOT IN subquery optimization

Andrey Lepikhov <[email protected]>
Newsgroups gmane.comp.db.postgresql.devel.general
Organization Postgres Professional
Message-ID <[email protected]>

On 1/7/20 12:34 AM, Li, Zheng wrote:
> Hi Andrey,
> 
> Thanks for the comment!
> 
> The unimproved cases you mentioned all fall into the category “correlated subquery”. This category is explicitly disallowed by existing code to convert to join in convert_ANY_sublink_to_join:
>      /*
>       * The sub-select must not refer to any Vars of the parent query. (Vars of
>       * higher levels should be okay, though.)
>       */
>      if (contain_vars_of_level((Node *) subselect, 1))
>          return NULL;
> 
> I think this is also the reason why hashed subplan is not used for such subqueries.
> 
> It's probably not always safe to convert a correlated subquery to join. We need to find out/prove when it’s safe/unsafe to convert such ANY subquery if we were to do so.
> 

Maybe this part of code contains logical error?
You optimize only the special case of the "NOT IN" expression, equal to 
NOT EXISTS. The convert_EXISTS_sublink_to_join() routine can contain 
vars of the parent query.
May be you give an trivial example for this problem?

-- 
Andrey Lepikhov
Postgres Professional
https://postgrespro.com
The Russian Postgres Company
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.