mirror of
https://github.com/postgres/postgres.git
synced 2025-11-15 03:41:20 +03:00
Fix some bogosities in the code that deals with estimating the fraction
of tuples we are going to retrieve from a sub-SELECT. Must have been half asleep when I did this code the first time :-(
This commit is contained in:
@@ -42,7 +42,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/costsize.c,v 1.52 2000/02/15 20:49:16 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/costsize.c,v 1.53 2000/03/14 02:23:14 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -687,8 +687,8 @@ cost_qual_eval_walker(Node *node, Cost *total)
|
||||
* (We assume that sub-selects that can be executed as
|
||||
* InitPlans have already been removed from the expression.)
|
||||
*
|
||||
* NOTE: this logic should agree with make_subplan in
|
||||
* subselect.c.
|
||||
* NOTE: this logic should agree with the estimates used by
|
||||
* make_subplan() in plan/subselect.c.
|
||||
*/
|
||||
{
|
||||
SubPlan *subplan = (SubPlan *) expr->oper;
|
||||
@@ -701,16 +701,18 @@ cost_qual_eval_walker(Node *node, Cost *total)
|
||||
subcost = plan->startup_cost +
|
||||
(plan->total_cost - plan->startup_cost) / plan->plan_rows;
|
||||
}
|
||||
else if (subplan->sublink->subLinkType == EXPR_SUBLINK)
|
||||
{
|
||||
/* assume we need all tuples */
|
||||
subcost = plan->total_cost;
|
||||
}
|
||||
else
|
||||
else if (subplan->sublink->subLinkType == ALL_SUBLINK ||
|
||||
subplan->sublink->subLinkType == ANY_SUBLINK)
|
||||
{
|
||||
/* assume we need 50% of the tuples */
|
||||
subcost = plan->startup_cost +
|
||||
0.50 * (plan->total_cost - plan->startup_cost);
|
||||
/* XXX what if subplan has been materialized? */
|
||||
}
|
||||
else
|
||||
{
|
||||
/* assume we need all tuples */
|
||||
subcost = plan->total_cost;
|
||||
}
|
||||
*total += subcost;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user