Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit48239e1

Browse files
committed
Avoid useless work during set_plain_rel_pathlist() when the relation
will be excluded by constraint exclusion anyway. Greg Stark
1 parent925ca9d commit48239e1

File tree

1 file changed

+19
-17
lines changed

1 file changed

+19
-17
lines changed

‎src/backend/optimizer/path/allpaths.c

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/optimizer/path/allpaths.c,v 1.161 2007/02/22 22:00:23 tgl Exp $
11+
* $PostgreSQL: pgsql/src/backend/optimizer/path/allpaths.c,v 1.162 2007/04/21 06:18:52 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -196,29 +196,16 @@ set_rel_pathlist(PlannerInfo *root, RelOptInfo *rel, Index rti)
196196
staticvoid
197197
set_plain_rel_pathlist(PlannerInfo*root,RelOptInfo*rel,RangeTblEntry*rte)
198198
{
199-
/* Mark rel with estimated output rows, width, etc */
200-
set_baserel_size_estimates(root,rel);
201-
202-
/* Test any partial indexes of rel for applicability */
203-
check_partial_indexes(root,rel);
204-
205-
/*
206-
* Check to see if we can extract any restriction conditions from join
207-
* quals that are OR-of-AND structures. If so, add them to the rel's
208-
* restriction list, and recompute the size estimates.
209-
*/
210-
if (create_or_index_quals(root,rel))
211-
set_baserel_size_estimates(root,rel);
212-
213199
/*
214200
* If we can prove we don't need to scan the rel via constraint exclusion,
215201
* set up a single dummy path for it. (Rather than inventing a special
216202
* "dummy" path type, we represent this as an AppendPath with no members.)
217203
*/
218204
if (relation_excluded_by_constraints(rel,rte))
219205
{
220-
/*Reset output-rows estimate to 0 */
206+
/*Set dummy size estimates --- we leave attr_widths[] as zeroes */
221207
rel->rows=0;
208+
rel->width=0;
222209

223210
add_path(rel, (Path*)create_append_path(rel,NIL));
224211

@@ -228,6 +215,20 @@ set_plain_rel_pathlist(PlannerInfo *root, RelOptInfo *rel, RangeTblEntry *rte)
228215
return;
229216
}
230217

218+
/* Mark rel with estimated output rows, width, etc */
219+
set_baserel_size_estimates(root,rel);
220+
221+
/* Test any partial indexes of rel for applicability */
222+
check_partial_indexes(root,rel);
223+
224+
/*
225+
* Check to see if we can extract any restriction conditions from join
226+
* quals that are OR-of-AND structures. If so, add them to the rel's
227+
* restriction list, and recompute the size estimates.
228+
*/
229+
if (create_or_index_quals(root,rel))
230+
set_baserel_size_estimates(root,rel);
231+
231232
/*
232233
* Generate paths and add them to the rel's pathlist.
233234
*
@@ -369,7 +370,8 @@ set_append_rel_pathlist(PlannerInfo *root, RelOptInfo *rel,
369370
/*
370371
* Propagate size information from the child back to the parent. For
371372
* simplicity, we use the largest widths from any child as the parent
372-
* estimates.
373+
* estimates. (If you want to change this, beware of child
374+
* attr_widths[] entries that haven't been set and are still 0.)
373375
*/
374376
rel->rows+=childrel->rows;
375377
if (childrel->width>rel->width)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp