Search Postgresql Archives

Re: PG choosing nested loop for set membership?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Brian Crowell <brian@xxxxxxxxxx> writes:
> Here's what I did, though. I collapsed the pl2.current_user view into
> pl2.visible_accounts:

> ===
> select
>     acc.account,
>     acc.manager,
>     acc.is_fund
> from pl2._visible_accounts_by_rule_set acc
>     inner join (pl2._users u
>     left join pl2._users iu on u.impersonating = iu.user_id)
>         on acc.rule_set_id = coalesce(iu.permission_rule_set_id,
> u.permission_rule_set_id)
> where u.user_principal_name = session_user
> ===

> I noticed that join-on-coalesce pattern that gave us trouble in SQL
> Server. The query planner can't do a thing with that. So I rewrote the
> query so the last join would be solid:

> ===
> select
>     acc.account,
>     acc.manager,
>     acc.is_fund
> from pl2._users lu
>     inner join pl2._users u on u.user_id = coalesce(lu.impersonating,
> lu.user_id)
>     inner join pl2._visible_accounts_by_rule_set acc
>         on acc.rule_set_id = u.permission_rule_set_id
> where lu.user_principal_name = session_user
> ===

Hm.  It's not obvious from here that those give the same results ---
but you probably understand your schema better than the rest of us.

> I'll see if I can write an isolated test case for the coalesce
> misestimate. Or do you think the query planner will ever be able to do
> anything with that form?

Probably not much.  I'd guess that the real benefit of this approach
is that it avoids the join-condition-using-three-input-relations,
which is a bear from any angle.

			regards, tom lane


-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux