Save a few cycles in simple cases: no need to call cost_sort() when there
authorTom Lane
Fri, 24 Mar 2000 21:40:43 +0000 (21:40 +0000)
committerTom Lane
Fri, 24 Mar 2000 21:40:43 +0000 (21:40 +0000)
is no presorted path to compare with.

src/backend/optimizer/plan/planmain.c

index acc4eb5d9384dd6f5cad948dd51b5a038f1b5c79..4377359ddcc0ce50bbb73804cd15897d220be637 100644 (file)
@@ -14,7 +14,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.53 2000/03/21 05:11:58 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.54 2000/03/24 21:40:43 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -174,7 +174,6 @@ subplanner(Query *root,
 {
    RelOptInfo *final_rel;
    Path       *cheapestpath;
-   Path        sort_path;      /* dummy for result of cost_sort */
    Path       *presortedpath;
 
    /*
@@ -288,21 +287,22 @@ subplanner(Query *root,
     * cheaper than doing an explicit sort on the cheapest-total-cost path.
     */
    cheapestpath = final_rel->cheapest_total_path;
-   cost_sort(&sort_path, root->query_pathkeys,
-             final_rel->rows, final_rel->width);
-   sort_path.startup_cost += cheapestpath->total_cost;
-   sort_path.total_cost += cheapestpath->total_cost;
-
    presortedpath =
        get_cheapest_fractional_path_for_pathkeys(final_rel->pathlist,
                                                  root->query_pathkeys,
                                                  tuple_fraction);
    if (presortedpath)
    {
+       Path        sort_path;  /* dummy for result of cost_sort */
+
+       cost_sort(&sort_path, root->query_pathkeys,
+                 final_rel->rows, final_rel->width);
+       sort_path.startup_cost += cheapestpath->total_cost;
+       sort_path.total_cost += cheapestpath->total_cost;
        if (compare_fractional_path_costs(presortedpath, &sort_path,
                                          tuple_fraction) <= 0)
        {
-           /* Found a better presorted path, use it */
+           /* Presorted path is cheaper, use it */
            root->query_pathkeys = presortedpath->pathkeys;
            return create_plan(root, presortedpath);
        }