</listitem>
</varlistentry>
- <varlistentry id="guc-enable-incrementalsort" xreflabel="enable_incrementalsort">
- <term><varname>enable_incrementalsort</varname> (<type>boolean</type>)
+ <varlistentry id="guc-enable-incremental-sort" xreflabel="enable_incremental_sort">
+ <term><varname>enable_incremental_sort</varname> (<type>boolean</type>)
<indexterm>
- <primary><varname>enable_incrementalsort</varname> configuration parameter</primary>
+ <primary><varname>enable_incremental_sort</varname> configuration parameter</primary>
</indexterm>
</term>
<listitem>
-->
<para>
- Implement <link linkend="guc-enable-incrementalsort">incremental
+ Implement <link linkend="guc-enable-incremental-sort">incremental
sorting</link> (James Coleman, Alexander Korotkov, Tomas Vondra)
</para>
If a result is already sorted by several leading keys, this
allows for batch sorting of additional trailing keys because the
previous keys are already equal. This is controlled by <xref
- linkend="guc-enable-incrementalsort"/>.
+ linkend="guc-enable-incremental-sort"/>.
</para>
</listitem>
* Consider incremental sort, but only when the subpath is already
* partially sorted on a pathkey prefix.
*/
- if (enable_incrementalsort && presorted_keys > 0)
+ if (enable_incremental_sort && presorted_keys > 0)
{
Path *tmp;
bool enable_bitmapscan = true;
bool enable_tidscan = true;
bool enable_sort = true;
-bool enable_incrementalsort = true;
+bool enable_incremental_sort = true;
bool enable_hashagg = true;
bool hashagg_avoid_disk_plan = true;
bool enable_nestloop = true;
* presorted the path is. Additionally incremental sort may enable
* a cheaper startup path to win out despite higher total cost.
*/
- if (!enable_incrementalsort)
+ if (!enable_incremental_sort)
continue;
/* Likewise, if the path can't be used for incremental sort. */
* sort_pathkeys because then we can't possibly have a presorted
* prefix of the list without having the list be fully sorted.
*/
- if (enable_incrementalsort && list_length(root->sort_pathkeys) > 1)
+ if (enable_incremental_sort && list_length(root->sort_pathkeys) > 1)
{
ListCell *lc;
* when the path is not already sorted and when incremental sort
* is enabled.
*/
- if (is_sorted || !enable_incrementalsort)
+ if (is_sorted || !enable_incremental_sort)
continue;
/* Restore the input path (we might have added Sort on top). */
* when the path is not already sorted and when incremental
* sort is enabled.
*/
- if (is_sorted || !enable_incrementalsort)
+ if (is_sorted || !enable_incremental_sort)
continue;
/* Restore the input path (we might have added Sort on top). */
* group_pathkeys because then we can't possibly have a presorted
* prefix of the list without having the list be fully sorted.
*/
- if (enable_incrementalsort && list_length(root->group_pathkeys) > 1)
+ if (enable_incremental_sort && list_length(root->group_pathkeys) > 1)
{
foreach(lc, input_rel->pathlist)
{
* when the path is not already sorted and when incremental sort
* is enabled.
*/
- if (is_sorted || !enable_incrementalsort)
+ if (is_sorted || !enable_incremental_sort)
continue;
/* Restore the input path (we might have added Sort on top). */
* group_pathkeys because then we can't possibly have a presorted prefix
* of the list without having the list be fully sorted.
*/
- if (!enable_incrementalsort || list_length(root->group_pathkeys) == 1)
+ if (!enable_incremental_sort || list_length(root->group_pathkeys) == 1)
return;
/* also consider incremental sort on partial paths, if enabled */
NULL, NULL, NULL
},
{
- {"enable_incrementalsort", PGC_USERSET, QUERY_TUNING_METHOD,
+ {"enable_incremental_sort", PGC_USERSET, QUERY_TUNING_METHOD,
gettext_noop("Enables the planner's use of incremental sort steps."),
NULL
},
- &enable_incrementalsort,
+ &enable_incremental_sort,
true,
NULL, NULL, NULL
},
#enable_parallel_append = on
#enable_seqscan = on
#enable_sort = on
-#enable_incrementalsort = on
+#enable_incremental_sort = on
#enable_tidscan = on
#enable_partitionwise_join = off
#enable_partitionwise_aggregate = off
extern PGDLLIMPORT bool enable_bitmapscan;
extern PGDLLIMPORT bool enable_tidscan;
extern PGDLLIMPORT bool enable_sort;
-extern PGDLLIMPORT bool enable_incrementalsort;
+extern PGDLLIMPORT bool enable_incremental_sort;
extern PGDLLIMPORT bool enable_hashagg;
extern PGDLLIMPORT bool hashagg_avoid_disk_plan;
extern PGDLLIMPORT bool enable_nestloop;
insert into t select mod(i,10),mod(i,10),i from generate_series(1,10000) s(i);
create index on t (a);
analyze t;
-set enable_incrementalsort = off;
+set enable_incremental_sort = off;
explain (costs off) select a,b,sum(c) from t group by 1,2 order by 1,2,3 limit 1;
QUERY PLAN
------------------------------------------------------
-> Parallel Seq Scan on t
(10 rows)
-set enable_incrementalsort = on;
+set enable_incremental_sort = on;
explain (costs off) select a,b,sum(c) from t group by 1,2 order by 1,2,3 limit 1;
QUERY PLAN
----------------------------------------------------------------------
-- Disable parallel plans.
SET max_parallel_workers_per_gather TO 0;
-- Disable incremental sort, which can influence selected plans due to fuzz factor.
-SET enable_incrementalsort TO off;
+SET enable_incremental_sort TO off;
--
-- Tests for list partitioned tables.
--
enable_gathermerge | on
enable_hashagg | on
enable_hashjoin | on
- enable_incrementalsort | on
+ enable_incremental_sort | on
enable_indexonlyscan | on
enable_indexscan | on
enable_material | on
create index on t (a);
analyze t;
-set enable_incrementalsort = off;
+set enable_incremental_sort = off;
explain (costs off) select a,b,sum(c) from t group by 1,2 order by 1,2,3 limit 1;
-set enable_incrementalsort = on;
+set enable_incremental_sort = on;
explain (costs off) select a,b,sum(c) from t group by 1,2 order by 1,2,3 limit 1;
-- Incremental sort vs. set operations with varno 0
-- Disable parallel plans.
SET max_parallel_workers_per_gather TO 0;
-- Disable incremental sort, which can influence selected plans due to fuzz factor.
-SET enable_incrementalsort TO off;
+SET enable_incremental_sort TO off;
--
-- Tests for list partitioned tables.