• T
    Remove GROUP BY columns that are functionally dependent on other columns. · d4c3a156
    Tom Lane 提交于
    If a GROUP BY clause includes all columns of a non-deferred primary key,
    as well as other columns of the same relation, those other columns are
    redundant and can be dropped from the grouping; the pkey is enough to
    ensure that each row of the table corresponds to a separate group.
    Getting rid of the excess columns will reduce the cost of the sorting or
    hashing needed to implement GROUP BY, and can indeed remove the need for
    a sort step altogether.
    
    This seems worth testing for since many query authors are not aware of
    the GROUP-BY-primary-key exception to the rule about queries not being
    allowed to reference non-grouped-by columns in their targetlists or
    HAVING clauses.  Thus, redundant GROUP BY items are not uncommon.  Also,
    we can make the test pretty cheap in most queries where it won't help
    by not looking up a rel's primary key until we've found that at least
    two of its columns are in GROUP BY.
    
    David Rowley, reviewed by Julien Rouhaud
    d4c3a156
planner.c 153.1 KB