Re: PATCH: use foreign keys to improve join estimates v1

Поиск
Список
Период
Сортировка
От David Rowley
Тема Re: PATCH: use foreign keys to improve join estimates v1
Дата
Msg-id CAApHDvojqqO6ULGFVRXXOCyvu8tb+o6KA8CSUm2vq0d3EB_qKg@mail.gmail.com
обсуждение исходный текст
Ответ на PATCH: use foreign keys to improve join estimates v1  (Tomas Vondra <tomas.vondra@2ndquadrant.com>)
Ответы Re: PATCH: use foreign keys to improve join estimates v1  (Tomas Vondra <tomas.vondra@2ndquadrant.com>)
Список pgsql-hackers
On 7 April 2015 at 13:41, Tomas Vondra <tomas.vondra@2ndquadrant.com> wrote:

(1) The current patch only does the trick when the FK matches the
    conditions perfectly - when there are no missing columns (present
    in the FK, not covered by a condition).


Hi Tomas,

I did glance at this patch a while back, but just thinking on it again.

I think if you find any quals that are a part of *any* foreign key between the 2 join tables, then you should be never assume these quals to reduce the number of rows. I believe this should be the case even if you don't fully match all columns of the foreign key. 

If we modify your example a little, let's say your foreign key between fact and dim is made from 3 columns (a,b,c)

If we do:

EXPLAIN SELECT * FROM fact f JOIN dim d USING (a,b);

Then we should always (under normal circumstances) find at least one matching row, although in this case since the join qual for c is missing, we could find more than 1 matching row.

Without digging too deep here, I'd say that the best way to do this would be to either have calc_joinrel_size_estimate() build a list of restrictinfo items of all quals that are NOT part of any foreign key and pass that trimmed list down to clauselist_selectivity() for selectivity estimates. Or perhaps a better way would be just to teach clauselist_selectivity() about foreign keys. Likely clauselist_selectivity() would just have to skip over RestrictInfo items that are part of a foreign key.

Regards

David Rowley

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

Предыдущее
От: Robert Haas
Дата:
Сообщение: Re: jsonb concatenate operator's semantics seem questionable
Следующее
От: Dmitriy Olshevskiy
Дата:
Сообщение: fix typos