Re: Bad plan chosen for union all

Поиск
Список
Период
Сортировка
От Alex Reece
Тема Re: Bad plan chosen for union all
Дата
Msg-id CANywC6BfV4f-j3aNM-FRBJS7PTad1kFV=+9-+85sfQrVTwvoLg@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Bad plan chosen for union all  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-performance
One more thing. Given this: > The difference here is that, from the perspective of the outer query, > the WHERE condition is a restriction clause on the "cim" relation, > not a join clause. So it will get pushed down into the subquery > without creating any join order constraints on the outer query. I expected the lateral form of the query to properly use the indexes. Sure enough, this correctly uses the index: explain select cim.yield from earnings JOIN contributions on contributions.id = earnings.note_id JOIN LATERAL ( SELECT contribution_id, max(CASE metrics.name WHEN 'Yield'::text THEN projected ELSE NULL::double precision END) AS yield from contribution_metrics JOIN metrics ON metrics.id = metric WHERE contributions.id = contribution_id group by contribution_id ) cim ON true WHERE earnings.id = '\x595400456c1f1400116b3843' However, when I try to wrap that subquery query again (e.g. as I would need to if it were a view), it doesn't restrict: select cim.yield from earnings JOIN contributions on contributions.id = earnings.note_id JOIN LATERAL ( select * from ( SELECT contribution_id, max(CASE metrics.name WHEN 'Yield'::text THEN projected ELSE NULL::double precision END) AS yield from contribution_metrics JOIN metrics ON metrics.id = metric group by contribution_id ) my_view WHERE contribution_id = contributions.id ) cim ON true WHERE earnings.id = '\x595400456c1f1400116b3843' Is there a way I can get the restriction to be pushed down into my subquery in this lateral form? Best, ~Alex

В списке pgsql-performance по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Bad plan chosen for union all
Следующее
От: Dinesh Chandra 12108
Дата:
Сообщение: ODBC--call failed :: Bindings were not allocated properly