• Tom Lane's avatar
    Improve inheritance_planner()'s performance for large inheritance sets. · 2cb9ec1b
    Tom Lane authored
    Commit c03ad560 introduced a planner
    performance regression for UPDATE/DELETE on large inheritance sets.
    It required copying the append_rel_list (which is of size proportional to
    the number of inherited tables) once for each inherited table, thus
    resulting in O(N^2) time and memory consumption.  While it's difficult to
    avoid that in general, the extra work only has to be done for
    append_rel_list entries that actually reference subquery RTEs, which
    inheritance-set entries will not.  So we can buy back essentially all of
    the loss in cases without subqueries in FROM; and even for those, the added
    work is mainly proportional to the number of UNION ALL subqueries.
    
    Back-patch to 9.2, like the previous commit.
    
    Tom Lane and Dean Rasheed, per a complaint from Thomas Munro.
    2cb9ec1b
planner.c 142 KB