Обсуждение: from_collapse_limit considerations

Поиск
Список
Период
Сортировка

from_collapse_limit considerations

От
Antonin Houska
Дата:
While doing experiments with rather long FROM-lists, I looked closely at the
logic related to from_collapse_limit.

I noticed that - unlike join_collapse_limit - the from_collapse_limit does not
enforce maximum length of the top-level list. Shouldn't it do? Too long
FROM-list can obviously lead to excessive planning time.

Also, the order of FROM-list items seems to affect the way RTEs are grouped
into (sub)lists. In this example, the join of tab_0, tab_1, tab_2, tab_3 gets
expanded into 4 separate RTE refs:

SET from_collapse_limit TO 5;

SELECT    *
FROM
    (
        (
            tab_0
            JOIN
            tab_1
            ON tab_0.id = tab_1.id
        )
        JOIN
        (
            tab_2
            JOIN
            tab_3
            ON tab_2.id = tab_3.id
        )
        ON    tab_1.id = tab_2.id
    ),
    tab_4
    JOIN
    tab_5
    ON tab_4.id = tab_5.id
WHERE     tab_3.id = tab_4.id;

However, in the next example (the JOIN of tab_4 and tab_5 moved to the
beginning of the FROM list), the "bigger join" (tab_0 through tab_3) "comes
too late", so it's inserted as a sub-list.

SET from_collapse_limit TO 5;

SELECT    *
FROM
    tab_4
    JOIN
    tab_5
    ON tab_4.id = tab_5.id,
    (
        (
            tab_0
            JOIN
            tab_1
            ON tab_0.id = tab_1.id
        )
        JOIN
        (
            tab_2
            JOIN
            tab_3
            ON tab_2.id = tab_3.id
        )
        ON    tab_1.id = tab_2.id
    )
WHERE     tab_3.id = tab_4.id;


Is anything wrong about the idea not to estimate the total length of the FROM
list in deconstruct_recurse and to do additional collapsing later instead? The
patch attached here tries to do so.

I wonder if change of the logic behind from_collapse_limit should be
considered acceptable for users or not: although it improves control over
planning of queries having long FROM-list, it can make some plans of existing
applications worse, unless from_collapse_limit is increased accordingly.


--
Antonin Houska
Cybertec Schönig & Schönig GmbH
Gröhrmühlgasse 26
A-2700 Wiener Neustadt
Web: http://www.postgresql-support.de, http://www.cybertec.at

Вложения

Re: from_collapse_limit considerations

От
Tom Lane
Дата:
Antonin Houska <ah@cybertec.at> writes:
> I noticed that - unlike join_collapse_limit - the from_collapse_limit does not
> enforce maximum length of the top-level list. Shouldn't it do?

How would it do that?  You want it to fail outright if there are more than
N tables?  That seems unhelpful.

> Also, the order of FROM-list items seems to affect the way RTEs are grouped
> into (sub)lists.

Yeah.
        regards, tom lane



Re: from_collapse_limit considerations

От
Antonin Houska
Дата:
[ I think I responded earlier but don't see my mail in the archive... ]

Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Antonin Houska <ah@cybertec.at> writes:
> > I noticed that - unlike join_collapse_limit - the from_collapse_limit does not
> > enforce maximum length of the top-level list. Shouldn't it do?
>
> How would it do that?  You want it to fail outright if there are more than
> N tables?  That seems unhelpful.

Sure, truncation of the FROM list would be crazy, and that's not what I tried to propose.

--
Antonin Houska
Cybertec Schönig & Schönig GmbH
Gröhrmühlgasse 26
A-2700 Wiener Neustadt
Web: http://www.postgresql-support.de, http://www.cybertec.at