mirror of
https://github.com/postgres/postgres.git
synced 2025-07-07 00:36:50 +03:00
Planner speedup hacking. Avoid saving useless pathkeys, so that path
comparison does not consider paths different when they differ only in uninteresting aspects of sort order. (We had a special case of this consideration for indexscans already, but generalize it to apply to ordered join paths too.) Be stricter about what is a canonical pathkey to allow faster pathkey comparison. Cache canonical pathkeys and dispersion stats for left and right sides of a RestrictInfo's clause, to avoid repeated computation. Total speedup will depend on number of tables in a query, but I see about 4x speedup of planning phase for a sample seven-table query.
This commit is contained in:
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.97 2000/12/06 23:55:17 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.98 2000/12/14 22:30:43 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -931,13 +931,12 @@ grouping_planner(Query *parse, double tuple_fraction)
|
||||
* If both GROUP BY and ORDER BY are specified, we will need
|
||||
* two levels of sort --- and, therefore, certainly need to
|
||||
* read all the input tuples --- unless ORDER BY is a subset
|
||||
* of GROUP BY. (Although we are comparing non-canonicalized
|
||||
* pathkeys here, it should be OK since they will both contain
|
||||
* only single-element sublists at this point. See
|
||||
* pathkeys.c.)
|
||||
* of GROUP BY. (We have not yet canonicalized the pathkeys,
|
||||
* so must use the slower noncanonical comparison method.)
|
||||
*/
|
||||
if (parse->groupClause && parse->sortClause &&
|
||||
!pathkeys_contained_in(sort_pathkeys, group_pathkeys))
|
||||
!noncanonical_pathkeys_contained_in(sort_pathkeys,
|
||||
group_pathkeys))
|
||||
tuple_fraction = 0.0;
|
||||
}
|
||||
else if (parse->hasAggs)
|
||||
|
Reference in New Issue
Block a user