The first half of the work to support PostgreSQL 10.
This just makes it can work with the version of PG. So partial index
paths are lost during Parallel hint processing. Regression tests are
heavily modified but most of them just comes from the change of
original planner behavior introduced at the point of Pg10.
* static functions:
* set_plain_rel_pathlist()
* set_append_rel_pathlist()
+ * add_paths_to_append_rel()
* generate_mergeappend_paths()
* get_cheapest_parameterized_child_path()
* accumulate_append_subpath()
create_tidscan_paths(root, rel);
}
+
/*
* set_append_rel_pathlist
* Build access paths for an "append relation"
{
int parentRTindex = rti;
List *live_childrels = NIL;
- List *subpaths = NIL;
- bool subpaths_valid = true;
- List *partial_subpaths = NIL;
- bool partial_subpaths_valid = true;
- List *all_child_pathkeys = NIL;
- List *all_child_outers = NIL;
ListCell *l;
/*
* Generate access paths for each member relation, and remember the
- * cheapest path for each one. Also, identify all pathkeys (orderings)
- * and parameterizations (required_outer sets) available for the member
- * relations.
+ * non-dummy children.
*/
foreach(l, root->append_rel_list)
{
int childRTindex;
RangeTblEntry *childRTE;
RelOptInfo *childrel;
- ListCell *lcp;
/* append_rel_list contains all append rels; ignore others */
if (appinfo->parent_relid != parentRTindex)
* Child is live, so add it to the live_childrels list for use below.
*/
live_childrels = lappend(live_childrels, childrel);
+ }
+
+ /* Add paths to the "append" relation. */
+ add_paths_to_append_rel(root, rel, live_childrels);
+}
+
+/*
+ * add_paths_to_append_rel
+ * Generate paths for given "append" relation given the set of non-dummy
+ * child rels.
+ *
+ * The function collects all parameterizations and orderings supported by the
+ * non-dummy children. For every such parameterization or ordering, it creates
+ * an append path collecting one path from each non-dummy child with given
+ * parameterization or ordering. Similarly it collects partial paths from
+ * non-dummy children to create partial append paths.
+ */
+static void
+add_paths_to_append_rel(PlannerInfo *root, RelOptInfo *rel,
+ List *live_childrels)
+{
+ List *subpaths = NIL;
+ bool subpaths_valid = true;
+ List *partial_subpaths = NIL;
+ bool partial_subpaths_valid = true;
+ List *all_child_pathkeys = NIL;
+ List *all_child_outers = NIL;
+ ListCell *l;
+ List *partitioned_rels = NIL;
+ RangeTblEntry *rte;
+
+ rte = planner_rt_fetch(rel->relid, root);
+ if (rte->relkind == RELKIND_PARTITIONED_TABLE)
+ {
+ partitioned_rels = get_partitioned_child_rels(root, rel->relid);
+ /* The root partitioned table is included as a child rel */
+ Assert(list_length(partitioned_rels) >= 1);
+ }
+
+ /*
+ * For every non-dummy child, remember the cheapest path. Also, identify
+ * all pathkeys (orderings) and parameterizations (required_outer sets)
+ * available for the non-dummy member relations.
+ */
+ foreach(l, live_childrels)
+ {
+ RelOptInfo *childrel = lfirst(l);
+ ListCell *lcp;
/*
* If child has an unparameterized cheapest-total path, add that to
* if we have zero or one live subpath due to constraint exclusion.)
*/
if (subpaths_valid)
- add_path(rel, (Path *) create_append_path(rel, subpaths, NULL, 0));
+ add_path(rel, (Path *) create_append_path(rel, subpaths, NULL, 0,
+ partitioned_rels));
/*
* Consider an append of partial unordered, unparameterized partial paths.
/* Generate a partial append path. */
appendpath = create_append_path(rel, partial_subpaths, NULL,
- parallel_workers);
+ parallel_workers, partitioned_rels);
add_partial_path(rel, (Path *) appendpath);
}
*/
if (subpaths_valid)
generate_mergeappend_paths(root, rel, live_childrels,
- all_child_pathkeys);
+ all_child_pathkeys,
+ partitioned_rels);
/*
* Build Append paths for each parameterization seen among the child rels.
if (subpaths_valid)
add_path(rel, (Path *)
- create_append_path(rel, subpaths, required_outer, 0));
+ create_append_path(rel, subpaths, required_outer, 0,
+ partitioned_rels));
}
}
+
/*
* generate_mergeappend_paths
* Generate MergeAppend paths for an append relation
static void
generate_mergeappend_paths(PlannerInfo *root, RelOptInfo *rel,
List *live_childrels,
- List *all_child_pathkeys)
+ List *all_child_pathkeys,
+ List *partitioned_rels)
{
ListCell *lcp;
get_cheapest_path_for_pathkeys(childrel->pathlist,
pathkeys,
NULL,
- STARTUP_COST);
+ STARTUP_COST,
+ false);
cheapest_total =
get_cheapest_path_for_pathkeys(childrel->pathlist,
pathkeys,
NULL,
- TOTAL_COST);
+ TOTAL_COST,
+ false);
/*
* If we can't find any paths with the right order just use the
rel,
startup_subpaths,
pathkeys,
- NULL));
+ NULL,
+ partitioned_rels));
if (startup_neq_total)
add_path(rel, (Path *) create_merge_append_path(root,
rel,
total_subpaths,
pathkeys,
- NULL));
+ NULL,
+ partitioned_rels));
}
}
+
/*
* get_cheapest_parameterized_child_path
* Get cheapest path for this relation that has exactly the requested
cheapest = get_cheapest_path_for_pathkeys(rel->pathlist,
NIL,
required_outer,
- TOTAL_COST);
+ TOTAL_COST,
+ false);
Assert(cheapest != NULL);
if (bms_equal(PATH_REQ_OUTER(cheapest), required_outer))
return cheapest;
return cheapest;
}
+
/*
* accumulate_append_subpath
* Add a subpath to the list being built for an Append or MergeAppend
return lappend(subpaths, path);
}
+
/*
* standard_join_search
* Find possible joinpaths for a query by successively finding ways
{
int parallel_workers;
- parallel_workers = compute_parallel_worker(rel, rel->pages);
+ parallel_workers = compute_parallel_worker(rel, rel->pages, -1);
/* If any limit was set to zero, the user doesn't want a parallel scan. */
if (parallel_workers <= 0)
add_partial_path(rel, create_seqscan_path(root, rel, NULL, parallel_workers));
}
-/*
- * Compute the number of parallel workers that should be used to scan a
- * relation. "pages" is the number of pages from the relation that we
- * expect to scan.
- */
-static int
-compute_parallel_worker(RelOptInfo *rel, BlockNumber pages)
-{
- int parallel_workers;
-
- /*
- * If the user has set the parallel_workers reloption, use that; otherwise
- * select a default number of workers.
- */
- if (rel->rel_parallel_workers != -1)
- parallel_workers = rel->rel_parallel_workers;
- else
- {
- int parallel_threshold;
-
- /*
- * If this relation is too small to be worth a parallel scan, just
- * return without doing anything ... unless it's an inheritance child.
- * In that case, we want to generate a parallel path here anyway. It
- * might not be worthwhile just for this relation, but when combined
- * with all of its inheritance siblings it may well pay off.
- */
- if (pages < (BlockNumber) min_parallel_relation_size &&
- rel->reloptkind == RELOPT_BASEREL)
- return 0;
-
- /*
- * Select the number of workers based on the log of the size of the
- * relation. This probably needs to be a good deal more
- * sophisticated, but we need something here for now. Note that the
- * upper limit of the min_parallel_relation_size GUC is chosen to
- * prevent overflow here.
- */
- parallel_workers = 1;
- parallel_threshold = Max(min_parallel_relation_size, 1);
- while (pages >= (BlockNumber) (parallel_threshold * 3))
- {
- parallel_workers++;
- parallel_threshold *= 3;
- if (parallel_threshold > INT_MAX / 3)
- break; /* avoid overflow */
- }
- }
-
- /*
- * In no case use more than max_parallel_workers_per_gather workers.
- */
- parallel_workers = Min(parallel_workers, max_parallel_workers_per_gather);
-
- return parallel_workers;
-}
-
/*
* join_search_one_level
}
}
+
/*
* make_rels_by_clause_joins
* Build joins between the given relation 'old_rel' and other relations
}
}
+
/*
* make_rels_by_clauseless_joins
* Given a relation 'old_rel' and a list of other relations
}
}
+
/*
* join_is_legal
* Determine whether a proposed join is legal given the query's
return true;
}
+
/*
* has_join_restriction
* Detect whether the specified relation has join-order restrictions,
return false;
}
+
/*
* is_dummy_rel --- has relation been proven empty?
*/
return IS_DUMMY_REL(rel);
}
+
/*
* Mark a relation as proven empty.
*
rel->partial_pathlist = NIL;
/* Set up the dummy path */
- add_path(rel, (Path *) create_append_path(rel, NIL, NULL, 0));
+ add_path(rel, (Path *) create_append_path(rel, NIL, NULL, 0, NIL));
/* Set or update cheapest_total_path and related fields */
set_cheapest(rel);
MemoryContextSwitchTo(oldcontext);
}
+
/*
* restriction_is_constant_false --- is a restrictlist just FALSE?
*
*/
foreach(lc, restrictlist)
{
- RestrictInfo *rinfo = (RestrictInfo *) lfirst(lc);
+ RestrictInfo *rinfo = lfirst_node(RestrictInfo, lc);
- Assert(IsA(rinfo, RestrictInfo));
if (only_pushed_down && !rinfo->is_pushed_down)
continue;
CREATE UNIQUE INDEX p2_val_idx ON p2 (val);
CREATE INDEX p2_ununi_id_val_idx ON p2 (val);
CREATE INDEX p2_val_idx_1 ON p2 USING hash (val);
-WARNING: hash indexes are not WAL-logged and their use is discouraged
CREATE INDEX p2_val_id_idx ON p2 (val, id);
CREATE INDEX p2_val_idx2 ON p2 (val COLLATE "ja_JP");
CREATE INDEX p2_val_idx3 ON p2 (val varchar_ops);
CREATE TABLE p2_c1 (LIKE p2 INCLUDING ALL, CHECK (id <= 100)) INHERITS(p2);
NOTICE: merging column "id" with inherited definition
NOTICE: merging column "val" with inherited definition
-WARNING: hash indexes are not WAL-logged and their use is discouraged
CREATE TABLE p2_c2 (LIKE p2 INCLUDING ALL, CHECK (id > 100 AND id <= 200)) INHERITS(p2);
NOTICE: merging column "id" with inherited definition
NOTICE: merging column "val" with inherited definition
-WARNING: hash indexes are not WAL-logged and their use is discouraged
CREATE TABLE p2_c3 (LIKE p2 INCLUDING ALL, CHECK (id > 200 AND id <= 300)) INHERITS(p2);
NOTICE: merging column "id" with inherited definition
NOTICE: merging column "val" with inherited definition
-WARNING: hash indexes are not WAL-logged and their use is discouraged
CREATE TABLE p2_c4 (LIKE p2 INCLUDING ALL, CHECK (id > 300)) INHERITS(p2);
NOTICE: merging column "id" with inherited definition
NOTICE: merging column "val" with inherited definition
-WARNING: hash indexes are not WAL-logged and their use is discouraged
CREATE TABLE p2_c1_c1 (LIKE p2 INCLUDING ALL, CHECK (id <= 50)) INHERITS(p2_c1);
NOTICE: merging column "id" with inherited definition
NOTICE: merging column "val" with inherited definition
-WARNING: hash indexes are not WAL-logged and their use is discouraged
CREATE TABLE p2_c1_c2 (LIKE p2 INCLUDING ALL, CHECK (id > 50 AND id <= 100)) INHERITS(p2_c1);
NOTICE: merging column "id" with inherited definition
NOTICE: merging column "val" with inherited definition
-WARNING: hash indexes are not WAL-logged and their use is discouraged
CREATE TABLE p2_c3_c1 (LIKE p2 INCLUDING ALL, CHECK (id > 200 AND id <= 250)) INHERITS(p2_c3);
NOTICE: merging column "id" with inherited definition
NOTICE: merging column "val" with inherited definition
-WARNING: hash indexes are not WAL-logged and their use is discouraged
CREATE TABLE p2_c3_c2 (LIKE p2 INCLUDING ALL, CHECK (id > 250 AND id <= 300)) INHERITS(p2_c3);
NOTICE: merging column "id" with inherited definition
NOTICE: merging column "val" with inherited definition
-WARNING: hash indexes are not WAL-logged and their use is discouraged
CREATE TABLE s0.t1 (id int PRIMARY KEY, val int);
INSERT INTO t1 SELECT i, i % 100 FROM (SELECT generate_series(1, 10000) i) t;
INSERT INTO t2 SELECT i, i % 10 FROM (SELECT generate_series(1, 1000) i) t;
OR name = 'client_min_messages'
ORDER BY category, name;
SELECT * FROM settings;
- name | setting | category
-----------------------------+-----------+---------------------------------------------
- geqo | on | Query Tuning / Genetic Query Optimizer
- geqo_effort | 5 | Query Tuning / Genetic Query Optimizer
- geqo_generations | 0 | Query Tuning / Genetic Query Optimizer
- geqo_pool_size | 0 | Query Tuning / Genetic Query Optimizer
- geqo_seed | 0 | Query Tuning / Genetic Query Optimizer
- geqo_selection_bias | 2 | Query Tuning / Genetic Query Optimizer
- geqo_threshold | 12 | Query Tuning / Genetic Query Optimizer
- constraint_exclusion | partition | Query Tuning / Other Planner Options
- cursor_tuple_fraction | 0.1 | Query Tuning / Other Planner Options
- default_statistics_target | 100 | Query Tuning / Other Planner Options
- force_parallel_mode | off | Query Tuning / Other Planner Options
- from_collapse_limit | 8 | Query Tuning / Other Planner Options
- join_collapse_limit | 8 | Query Tuning / Other Planner Options
- cpu_index_tuple_cost | 0.005 | Query Tuning / Planner Cost Constants
- cpu_operator_cost | 0.0025 | Query Tuning / Planner Cost Constants
- cpu_tuple_cost | 0.01 | Query Tuning / Planner Cost Constants
- effective_cache_size | 16384 | Query Tuning / Planner Cost Constants
- min_parallel_relation_size | 1024 | Query Tuning / Planner Cost Constants
- parallel_setup_cost | 1000 | Query Tuning / Planner Cost Constants
- parallel_tuple_cost | 0.1 | Query Tuning / Planner Cost Constants
- random_page_cost | 4 | Query Tuning / Planner Cost Constants
- seq_page_cost | 1 | Query Tuning / Planner Cost Constants
- enable_bitmapscan | on | Query Tuning / Planner Method Configuration
- enable_hashagg | on | Query Tuning / Planner Method Configuration
- enable_hashjoin | on | Query Tuning / Planner Method Configuration
- enable_indexonlyscan | on | Query Tuning / Planner Method Configuration
- enable_indexscan | on | Query Tuning / Planner Method Configuration
- enable_material | on | Query Tuning / Planner Method Configuration
- enable_mergejoin | on | Query Tuning / Planner Method Configuration
- enable_nestloop | on | Query Tuning / Planner Method Configuration
- enable_seqscan | on | Query Tuning / Planner Method Configuration
- enable_sort | on | Query Tuning / Planner Method Configuration
- enable_tidscan | on | Query Tuning / Planner Method Configuration
- client_min_messages | notice | Reporting and Logging / When to Log
-(34 rows)
+ name | setting | category
+------------------------------+-----------+---------------------------------------------
+ geqo | on | Query Tuning / Genetic Query Optimizer
+ geqo_effort | 5 | Query Tuning / Genetic Query Optimizer
+ geqo_generations | 0 | Query Tuning / Genetic Query Optimizer
+ geqo_pool_size | 0 | Query Tuning / Genetic Query Optimizer
+ geqo_seed | 0 | Query Tuning / Genetic Query Optimizer
+ geqo_selection_bias | 2 | Query Tuning / Genetic Query Optimizer
+ geqo_threshold | 12 | Query Tuning / Genetic Query Optimizer
+ constraint_exclusion | partition | Query Tuning / Other Planner Options
+ cursor_tuple_fraction | 0.1 | Query Tuning / Other Planner Options
+ default_statistics_target | 100 | Query Tuning / Other Planner Options
+ force_parallel_mode | off | Query Tuning / Other Planner Options
+ from_collapse_limit | 8 | Query Tuning / Other Planner Options
+ join_collapse_limit | 8 | Query Tuning / Other Planner Options
+ cpu_index_tuple_cost | 0.005 | Query Tuning / Planner Cost Constants
+ cpu_operator_cost | 0.0025 | Query Tuning / Planner Cost Constants
+ cpu_tuple_cost | 0.01 | Query Tuning / Planner Cost Constants
+ effective_cache_size | 16384 | Query Tuning / Planner Cost Constants
+ min_parallel_index_scan_size | 64 | Query Tuning / Planner Cost Constants
+ min_parallel_table_scan_size | 1024 | Query Tuning / Planner Cost Constants
+ parallel_setup_cost | 1000 | Query Tuning / Planner Cost Constants
+ parallel_tuple_cost | 0.1 | Query Tuning / Planner Cost Constants
+ random_page_cost | 4 | Query Tuning / Planner Cost Constants
+ seq_page_cost | 1 | Query Tuning / Planner Cost Constants
+ enable_bitmapscan | on | Query Tuning / Planner Method Configuration
+ enable_gathermerge | on | Query Tuning / Planner Method Configuration
+ enable_hashagg | on | Query Tuning / Planner Method Configuration
+ enable_hashjoin | on | Query Tuning / Planner Method Configuration
+ enable_indexonlyscan | on | Query Tuning / Planner Method Configuration
+ enable_indexscan | on | Query Tuning / Planner Method Configuration
+ enable_material | on | Query Tuning / Planner Method Configuration
+ enable_mergejoin | on | Query Tuning / Planner Method Configuration
+ enable_nestloop | on | Query Tuning / Planner Method Configuration
+ enable_seqscan | on | Query Tuning / Planner Method Configuration
+ enable_sort | on | Query Tuning / Planner Method Configuration
+ enable_tidscan | on | Query Tuning / Planner Method Configuration
+ client_min_messages | notice | Reporting and Logging / When to Log
+(36 rows)
ANALYZE;
(3 rows)
EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
- QUERY PLAN
------------------------------------------
+ QUERY PLAN
+-----------------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t2
- TID Cond: (ctid = '(1,1)'::tid)
-(6 rows)
+ -> Materialize
+ -> Tid Scan on t2
+ TID Cond: (ctid = '(1,1)'::tid)
+(7 rows)
/*+SeqScan(t1)*/
EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
-----------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
- -> Seq Scan on t1
- Filter: (ctid = '(1,1)'::tid)
-> Tid Scan on t2
TID Cond: (ctid = '(1,1)'::tid)
+ -> Seq Scan on t1
+ Filter: (ctid = '(1,1)'::tid)
(6 rows)
/*+SeqScan(t2)*/
-----------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
- -> Seq Scan on t1
- Filter: (ctid = '(1,1)'::tid)
-> Tid Scan on t2
TID Cond: (ctid = '(1,1)'::tid)
+ -> Seq Scan on t1
+ Filter: (ctid = '(1,1)'::tid)
(6 rows)
/*+SeqScan(t1) NoIndexScan(t2)*/
-----------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
- -> Seq Scan on t1
- Filter: (ctid = '(1,1)'::tid)
-> Tid Scan on t2
TID Cond: (ctid = '(1,1)'::tid)
+ -> Seq Scan on t1
+ Filter: (ctid = '(1,1)'::tid)
(6 rows)
/*+SeqScan(t1) NoBitmapScan(t2)*/
-----------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
- -> Seq Scan on t1
- Filter: (ctid = '(1,1)'::tid)
-> Tid Scan on t2
TID Cond: (ctid = '(1,1)'::tid)
+ -> Seq Scan on t1
+ Filter: (ctid = '(1,1)'::tid)
(6 rows)
/*+SeqScan(t1) NoTidScan(t2)*/
QUERY PLAN
---------------------------------------
Nested Loop
- -> Seq Scan on t1
+ Join Filter: (t1.id = t2.id)
+ -> Seq Scan on t2
Filter: (ctid = '(1,1)'::tid)
- -> Index Scan using t2_pkey on t2
- Index Cond: (id = t1.id)
+ -> Seq Scan on t1
Filter: (ctid = '(1,1)'::tid)
(6 rows)
-----------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
- -> Tid Scan on t1
- TID Cond: (ctid = '(1,1)'::tid)
-> Tid Scan on t2
TID Cond: (ctid = '(1,1)'::tid)
+ -> Tid Scan on t1
+ TID Cond: (ctid = '(1,1)'::tid)
(6 rows)
/*+TidScan(t2)*/
-----------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
- -> Tid Scan on t1
- TID Cond: (ctid = '(1,1)'::tid)
-> Tid Scan on t2
TID Cond: (ctid = '(1,1)'::tid)
+ -> Tid Scan on t1
+ TID Cond: (ctid = '(1,1)'::tid)
(6 rows)
/*+TidScan(t1) NoIndexScan(t2)*/
-----------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
- -> Tid Scan on t1
- TID Cond: (ctid = '(1,1)'::tid)
-> Tid Scan on t2
TID Cond: (ctid = '(1,1)'::tid)
+ -> Tid Scan on t1
+ TID Cond: (ctid = '(1,1)'::tid)
(6 rows)
/*+TidScan(t1) NoBitmapScan(t2)*/
-----------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
- -> Tid Scan on t1
- TID Cond: (ctid = '(1,1)'::tid)
-> Tid Scan on t2
TID Cond: (ctid = '(1,1)'::tid)
+ -> Tid Scan on t1
+ TID Cond: (ctid = '(1,1)'::tid)
(6 rows)
/*+TidScan(t1) NoTidScan(t2)*/
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------
+ QUERY PLAN
+-----------------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t2
- TID Cond: (ctid = '(1,1)'::tid)
-(6 rows)
+ -> Materialize
+ -> Tid Scan on t2
+ TID Cond: (ctid = '(1,1)'::tid)
+(7 rows)
/*+NoSeqScan(t2)*/
EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------
+ QUERY PLAN
+-----------------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t2
- TID Cond: (ctid = '(1,1)'::tid)
-(6 rows)
+ -> Materialize
+ -> Tid Scan on t2
+ TID Cond: (ctid = '(1,1)'::tid)
+(7 rows)
/*+NoSeqScan(t1) SeqScan(t2)*/
EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------
+ QUERY PLAN
+-----------------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t2
- TID Cond: (ctid = '(1,1)'::tid)
-(6 rows)
+ -> Materialize
+ -> Tid Scan on t2
+ TID Cond: (ctid = '(1,1)'::tid)
+(7 rows)
/*+NoSeqScan(t1) NoIndexScan(t2)*/
EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------
+ QUERY PLAN
+-----------------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t2
- TID Cond: (ctid = '(1,1)'::tid)
-(6 rows)
+ -> Materialize
+ -> Tid Scan on t2
+ TID Cond: (ctid = '(1,1)'::tid)
+(7 rows)
/*+NoSeqScan(t1) NoBitmapScan(t2)*/
EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------
+ QUERY PLAN
+-----------------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t2
- TID Cond: (ctid = '(1,1)'::tid)
-(6 rows)
+ -> Materialize
+ -> Tid Scan on t2
+ TID Cond: (ctid = '(1,1)'::tid)
+(7 rows)
/*+NoSeqScan(t1) NoTidScan(t2)*/
EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------
+ QUERY PLAN
+-----------------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t2
- TID Cond: (ctid = '(1,1)'::tid)
-(6 rows)
+ -> Materialize
+ -> Tid Scan on t2
+ TID Cond: (ctid = '(1,1)'::tid)
+(7 rows)
/*+NoIndexScan(t2)*/
EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------
+ QUERY PLAN
+-----------------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t2
- TID Cond: (ctid = '(1,1)'::tid)
-(6 rows)
+ -> Materialize
+ -> Tid Scan on t2
+ TID Cond: (ctid = '(1,1)'::tid)
+(7 rows)
/*+NoIndexScan(t1) SeqScan(t2)*/
EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------
+ QUERY PLAN
+-----------------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t2
- TID Cond: (ctid = '(1,1)'::tid)
-(6 rows)
+ -> Materialize
+ -> Tid Scan on t2
+ TID Cond: (ctid = '(1,1)'::tid)
+(7 rows)
/*+NoIndexScan(t1) NoIndexScan(t2)*/
EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------
+ QUERY PLAN
+-----------------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t2
- TID Cond: (ctid = '(1,1)'::tid)
-(6 rows)
+ -> Materialize
+ -> Tid Scan on t2
+ TID Cond: (ctid = '(1,1)'::tid)
+(7 rows)
/*+NoIndexScan(t1) NoBitmapScan(t2)*/
EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------
+ QUERY PLAN
+-----------------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t2
- TID Cond: (ctid = '(1,1)'::tid)
-(6 rows)
+ -> Materialize
+ -> Tid Scan on t2
+ TID Cond: (ctid = '(1,1)'::tid)
+(7 rows)
/*+NoIndexScan(t1) NoTidScan(t2)*/
EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------
+ QUERY PLAN
+-----------------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t2
- TID Cond: (ctid = '(1,1)'::tid)
-(6 rows)
+ -> Materialize
+ -> Tid Scan on t2
+ TID Cond: (ctid = '(1,1)'::tid)
+(7 rows)
/*+NoBitmapScan(t2)*/
EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------
+ QUERY PLAN
+-----------------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t2
- TID Cond: (ctid = '(1,1)'::tid)
-(6 rows)
+ -> Materialize
+ -> Tid Scan on t2
+ TID Cond: (ctid = '(1,1)'::tid)
+(7 rows)
/*+NoBitmapScan(t1) SeqScan(t2)*/
EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------
+ QUERY PLAN
+-----------------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t2
- TID Cond: (ctid = '(1,1)'::tid)
-(6 rows)
+ -> Materialize
+ -> Tid Scan on t2
+ TID Cond: (ctid = '(1,1)'::tid)
+(7 rows)
/*+NoBitmapScan(t1) NoIndexScan(t2)*/
EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------
+ QUERY PLAN
+-----------------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t2
- TID Cond: (ctid = '(1,1)'::tid)
-(6 rows)
+ -> Materialize
+ -> Tid Scan on t2
+ TID Cond: (ctid = '(1,1)'::tid)
+(7 rows)
/*+NoBitmapScan(t1) NoBitmapScan(t2)*/
EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------
+ QUERY PLAN
+-----------------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t2
- TID Cond: (ctid = '(1,1)'::tid)
-(6 rows)
+ -> Materialize
+ -> Tid Scan on t2
+ TID Cond: (ctid = '(1,1)'::tid)
+(7 rows)
/*+NoBitmapScan(t1) NoTidScan(t2)*/
EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)';
-- additional test
EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)' AND t1.id < 10 AND t2.id < 10;
- QUERY PLAN
------------------------------------------
+ QUERY PLAN
+-----------------------------------------------
Nested Loop
Join Filter: (t1.id = t2.id)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
Filter: (id < 10)
- -> Tid Scan on t2
- TID Cond: (ctid = '(1,1)'::tid)
- Filter: (id < 10)
-(8 rows)
+ -> Materialize
+ -> Tid Scan on t2
+ TID Cond: (ctid = '(1,1)'::tid)
+ Filter: (id < 10)
+(9 rows)
/*+BitmapScan(t1) BitmapScan(t2)*/
EXPLAIN (COSTS false) SELECT * FROM t1, t2 WHERE t1.id = t2.id AND t1.ctid = '(1,1)' AND t2.ctid = '(1,1)' AND t1.id < 10 AND t2.id < 10;
QUERY PLAN
------------------------------
Hash Full Join
- Hash Cond: (t1.id = t2.id)
- -> Seq Scan on t1
+ Hash Cond: (t2.id = t1.id)
+ -> Seq Scan on t2
-> Hash
- -> Seq Scan on t2
+ -> Seq Scan on t1
(5 rows)
-- inheritance tables test
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------------------------------
Nested Loop
Join Filter: (p1.id = t1.id)
- -> Append
- -> Seq Scan on p1
- Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
- -> Seq Scan on p1_c1
- Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
- -> Seq Scan on p1_c2
- Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
- -> Seq Scan on p1_c3
- Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
- -> Seq Scan on p1_c4
- Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
- -> Seq Scan on p1_c1_c1
- Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
- -> Seq Scan on p1_c1_c2
- Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
- -> Seq Scan on p1_c3_c1
- Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
- -> Seq Scan on p1_c3_c2
- Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
+ -> Index Scan using t1_pkey on t1
+ Index Cond: (id < 10)
-> Materialize
- -> Index Scan using t1_pkey on t1
- Index Cond: (id < 10)
+ -> Append
+ -> Seq Scan on p1
+ Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
+ -> Seq Scan on p1_c1
+ Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
+ -> Seq Scan on p1_c2
+ Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
+ -> Seq Scan on p1_c3
+ Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
+ -> Seq Scan on p1_c4
+ Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
+ -> Seq Scan on p1_c1_c1
+ Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
+ -> Seq Scan on p1_c1_c2
+ Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
+ -> Seq Scan on p1_c3_c1
+ Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
+ -> Seq Scan on p1_c3_c2
+ Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
(24 rows)
/*+MergeJoin(p1 t1)*/
QUERY PLAN
-----------------------------------------------------------------------
Nested Loop
+ Join Filter: (p1.id = t1.id)
+ -> Index Scan using t1_pkey on t1
+ Index Cond: (id < 10)
-> Seq Scan on p1
Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
- -> Index Scan using t1_pkey on t1
- Index Cond: ((id = p1.id) AND (id < 10))
-(5 rows)
+(6 rows)
/*+MergeJoin(p1 t1)*/
EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
QUERY PLAN
-----------------------------------------------------------------------
Nested Loop
+ Join Filter: (p1.id = t1.id)
+ -> Index Scan using t1_pkey on t1
+ Index Cond: (id < 10)
-> Seq Scan on p1
Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
- -> Index Scan using t1_pkey on t1
- Index Cond: ((id = p1.id) AND (id < 10))
-(5 rows)
+(6 rows)
/*+MergeJoin(p1 t1)*/
EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
QUERY PLAN
-----------------------------------------------------------------------
Nested Loop
+ Join Filter: (p1.id = t1.id)
+ -> Index Scan using t1_pkey on t1
+ Index Cond: (id < 10)
-> Seq Scan on p1
Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
- -> Index Scan using t1_pkey on t1
- Index Cond: ((id = p1.id) AND (id < 10))
-(5 rows)
+(6 rows)
SET constraint_exclusion TO on;
EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
QUERY PLAN
-----------------------------------------------------------------------
Nested Loop
+ Join Filter: (p1.id = t1.id)
+ -> Index Scan using t1_pkey on t1
+ Index Cond: (id < 10)
-> Seq Scan on p1
Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
- -> Index Scan using t1_pkey on t1
- Index Cond: ((id = p1.id) AND (id < 10))
-(5 rows)
+(6 rows)
SET constraint_exclusion TO off;
/*+SeqScan(p1)*/
QUERY PLAN
-----------------------------------------------------------------------
Nested Loop
+ Join Filter: (p1.id = t1.id)
+ -> Index Scan using t1_pkey on t1
+ Index Cond: (id < 10)
-> Seq Scan on p1
Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
- -> Index Scan using t1_pkey on t1
- Index Cond: ((id = p1.id) AND (id < 10))
-(5 rows)
+(6 rows)
/*+IndexScan(p1)*/
EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
duplication hint:
error hint:
- QUERY PLAN
---------------------------------------------------
- Nested Loop
+ QUERY PLAN
+-------------------------------------------------
+ Merge Join
+ Merge Cond: (p1.id = t1.id)
-> Index Scan using p1_pkey on p1
Index Cond: ((id >= 50) AND (id <= 51))
Filter: (ctid = '(1,1)'::tid)
-> Index Scan using t1_pkey on t1
- Index Cond: ((id = p1.id) AND (id < 10))
-(6 rows)
+ Index Cond: (id < 10)
+(7 rows)
/*+BitmapScan(p1)*/
EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
duplication hint:
error hint:
- QUERY PLAN
--------------------------------------------------------
+ QUERY PLAN
+-------------------------------------------------------------
Nested Loop
- -> Bitmap Heap Scan on p1
- Recheck Cond: ((id >= 50) AND (id <= 51))
- Filter: (ctid = '(1,1)'::tid)
- -> Bitmap Index Scan on p1_pkey
- Index Cond: ((id >= 50) AND (id <= 51))
+ Join Filter: (p1.id = t1.id)
-> Index Scan using t1_pkey on t1
- Index Cond: ((id = p1.id) AND (id < 10))
-(8 rows)
+ Index Cond: (id < 10)
+ -> Materialize
+ -> Bitmap Heap Scan on p1
+ Recheck Cond: ((id >= 50) AND (id <= 51))
+ Filter: (ctid = '(1,1)'::tid)
+ -> Bitmap Index Scan on p1_pkey
+ Index Cond: ((id >= 50) AND (id <= 51))
+(10 rows)
/*+TidScan(p1)*/
EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
duplication hint:
error hint:
- QUERY PLAN
---------------------------------------------------
+ QUERY PLAN
+---------------------------------------------------
Nested Loop
- -> Tid Scan on p1
- TID Cond: (ctid = '(1,1)'::tid)
- Filter: ((id >= 50) AND (id <= 51))
+ Join Filter: (p1.id = t1.id)
-> Index Scan using t1_pkey on t1
- Index Cond: ((id = p1.id) AND (id < 10))
-(6 rows)
+ Index Cond: (id < 10)
+ -> Materialize
+ -> Tid Scan on p1
+ TID Cond: (ctid = '(1,1)'::tid)
+ Filter: ((id >= 50) AND (id <= 51))
+(8 rows)
SET constraint_exclusion TO on;
/*+SeqScan(p1)*/
QUERY PLAN
-----------------------------------------------------------------------
Nested Loop
+ Join Filter: (p1.id = t1.id)
+ -> Index Scan using t1_pkey on t1
+ Index Cond: (id < 10)
-> Seq Scan on p1
Filter: ((id >= 50) AND (id <= 51) AND (ctid = '(1,1)'::tid))
- -> Index Scan using t1_pkey on t1
- Index Cond: ((id = p1.id) AND (id < 10))
-(5 rows)
+(6 rows)
/*+IndexScan(p1)*/
EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
duplication hint:
error hint:
- QUERY PLAN
---------------------------------------------------
- Nested Loop
+ QUERY PLAN
+-------------------------------------------------
+ Merge Join
+ Merge Cond: (p1.id = t1.id)
-> Index Scan using p1_pkey on p1
Index Cond: ((id >= 50) AND (id <= 51))
Filter: (ctid = '(1,1)'::tid)
-> Index Scan using t1_pkey on t1
- Index Cond: ((id = p1.id) AND (id < 10))
-(6 rows)
+ Index Cond: (id < 10)
+(7 rows)
/*+BitmapScan(p1)*/
EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
duplication hint:
error hint:
- QUERY PLAN
--------------------------------------------------------
+ QUERY PLAN
+-------------------------------------------------------------
Nested Loop
- -> Bitmap Heap Scan on p1
- Recheck Cond: ((id >= 50) AND (id <= 51))
- Filter: (ctid = '(1,1)'::tid)
- -> Bitmap Index Scan on p1_pkey
- Index Cond: ((id >= 50) AND (id <= 51))
+ Join Filter: (p1.id = t1.id)
-> Index Scan using t1_pkey on t1
- Index Cond: ((id = p1.id) AND (id < 10))
-(8 rows)
+ Index Cond: (id < 10)
+ -> Materialize
+ -> Bitmap Heap Scan on p1
+ Recheck Cond: ((id >= 50) AND (id <= 51))
+ Filter: (ctid = '(1,1)'::tid)
+ -> Bitmap Index Scan on p1_pkey
+ Index Cond: ((id >= 50) AND (id <= 51))
+(10 rows)
/*+TidScan(p1)*/
EXPLAIN (COSTS false) SELECT * FROM ONLY p1, t1 WHERE p1.id >= 50 AND p1.id <= 51 AND p1.ctid = '(1,1)' AND p1.id = t1.id AND t1.id < 10;
duplication hint:
error hint:
- QUERY PLAN
---------------------------------------------------
+ QUERY PLAN
+---------------------------------------------------
Nested Loop
- -> Tid Scan on p1
- TID Cond: (ctid = '(1,1)'::tid)
- Filter: ((id >= 50) AND (id <= 51))
+ Join Filter: (p1.id = t1.id)
-> Index Scan using t1_pkey on t1
- Index Cond: ((id = p1.id) AND (id < 10))
-(6 rows)
+ Index Cond: (id < 10)
+ -> Materialize
+ -> Tid Scan on p1
+ TID Cond: (ctid = '(1,1)'::tid)
+ Filter: ((id >= 50) AND (id <= 51))
+(8 rows)
-- quote test
/*+SeqScan("""t1 ) ")IndexScan("t 2 """)HashJoin("""t1 ) "T3"t 2 """)Leading("""t1 ) "T3"t 2 """)Set(application_name"a a a"" a A")*/
QUERY PLAN
--------------------------------------------------
Nested Loop
- Join Filter: (t3.id = t4.id)
-> Nested Loop
Join Filter: (t1.val = t3.val)
-> Hash Join
-> Hash
-> Seq Scan on t2
-> Seq Scan on t3
- -> Seq Scan on t4
+ -> Index Scan using t4_pkey on t4
+ Index Cond: (id = t3.id)
(12 rows)
/*+Leading(((t1 t2) t3)) MergeJoin(t1 t2 t3 t4)*/
Filter: ((val >= '50'::text) AND (val <= '51'::text) AND (ctid = '(1,1)'::tid))
(19 rows)
-/*+IndexScan(p2 p2_val)*/
+-- Inhibit parallel exection to avoid interfaring the hint
+set max_parallel_workers_per_gather to 0;
+/*+ IndexScan(p2 p2_val)*/
EXPLAIN (COSTS false) SELECT val FROM p2 WHERE val >= '50' AND val <= '51' AND p2.ctid = '(1,1)';
LOG: available indexes for IndexScan(p2):
LOG: available indexes for IndexScan(p2_c1):
error hint:
\o
+set max_parallel_workers_per_gather to DEFAULT;
\! sql/maskout.sh results/pg_hint_plan.tmpout
QUERY PLAN
------------------------------------------------------------------------------------
SET pg_hint_plan.enable_hint_table TO on;
-- No. A-6-1-1
\d hint_plan.hints
- Table "hint_plan.hints"
- Column | Type | Modifiers
--------------------+---------+--------------------------------------------------------------
- id | integer | not null default nextval('hint_plan.hints_id_seq'::regclass)
- norm_query_string | text | not null
- application_name | text | not null
- hints | text | not null
+ Table "hint_plan.hints"
+ Column | Type | Collation | Nullable | Default
+-------------------+---------+-----------+----------+---------------------------------------------
+ id | integer | | not null | nextval('hint_plan.hints_id_seq'::regclass)
+ norm_query_string | text | | not null |
+ application_name | text | | not null |
+ hints | text | | not null |
Indexes:
"hints_pkey" PRIMARY KEY, btree (id)
"hints_norm_and_app" UNIQUE, btree (norm_query_string, application_name)
---- No. A-8-4 original GUC parameter pg_hint_plan.parse_messages
----
SET client_min_messages TO debug5;
-DEBUG: CommitTransactionCommand
-DEBUG: CommitTransaction
-DEBUG: name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
+DEBUG: CommitTransaction(1) name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0
-- No. A-8-4-1
SET pg_hint_plan.parse_messages TO debug5;
-DEBUG: StartTransactionCommand
-DEBUG: StartTransaction
-DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
-DEBUG: ProcessUtility
-DEBUG: CommitTransactionCommand
-DEBUG: CommitTransaction
-DEBUG: name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
+DEBUG: StartTransaction(1) name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0
+DEBUG: CommitTransaction(1) name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0
SHOW pg_hint_plan.parse_messages;
-DEBUG: StartTransactionCommand
-DEBUG: StartTransaction
-DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
-DEBUG: ProcessUtility
-DEBUG: CommitTransactionCommand
-DEBUG: CommitTransaction
-DEBUG: name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
+DEBUG: StartTransaction(1) name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0
+DEBUG: CommitTransaction(1) name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0
pg_hint_plan.parse_messages
-----------------------------
debug5
(1 row)
/*+Set*/SELECT 1;
-DEBUG: StartTransactionCommand
-DEBUG: StartTransaction
-DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
+DEBUG: StartTransaction(1) name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0
DEBUG: pg_hint_plan: hint syntax error at or near ""
DETAIL: Opening parenthesis is necessary.
-DEBUG: CommitTransactionCommand
-DEBUG: CommitTransaction
-DEBUG: name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
+DEBUG: CommitTransaction(1) name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0
?column?
----------
1
(1 row)
SET client_min_messages TO debug4;
-DEBUG: StartTransactionCommand
-DEBUG: StartTransaction
-DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
-DEBUG: ProcessUtility
-DEBUG: CommitTransactionCommand
-DEBUG: CommitTransaction
-DEBUG: name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
+DEBUG: StartTransaction(1) name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0
/*+Set*/SELECT 1;
-DEBUG: StartTransactionCommand
-DEBUG: StartTransaction
-DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
-DEBUG: CommitTransactionCommand
-DEBUG: CommitTransaction
-DEBUG: name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
?column?
----------
1
-- No. A-8-4-2
SET pg_hint_plan.parse_messages TO debug4;
-DEBUG: StartTransactionCommand
-DEBUG: StartTransaction
-DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
-DEBUG: ProcessUtility
-DEBUG: CommitTransactionCommand
-DEBUG: CommitTransaction
-DEBUG: name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
SHOW pg_hint_plan.parse_messages;
-DEBUG: StartTransactionCommand
-DEBUG: StartTransaction
-DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
-DEBUG: ProcessUtility
-DEBUG: CommitTransactionCommand
-DEBUG: CommitTransaction
-DEBUG: name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
pg_hint_plan.parse_messages
-----------------------------
debug4
(1 row)
/*+Set*/SELECT 1;
-DEBUG: StartTransactionCommand
-DEBUG: StartTransaction
-DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
DEBUG: pg_hint_plan: hint syntax error at or near ""
DETAIL: Opening parenthesis is necessary.
-DEBUG: CommitTransactionCommand
-DEBUG: CommitTransaction
-DEBUG: name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
?column?
----------
1
(1 row)
SET client_min_messages TO debug3;
-DEBUG: StartTransactionCommand
-DEBUG: StartTransaction
-DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
-DEBUG: ProcessUtility
-DEBUG: CommitTransactionCommand
-DEBUG: CommitTransaction
-DEBUG: name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
/*+Set*/SELECT 1;
-DEBUG: StartTransactionCommand
-DEBUG: StartTransaction
-DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
-DEBUG: CommitTransactionCommand
-DEBUG: CommitTransaction
-DEBUG: name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
?column?
----------
1
-- No. A-8-4-3
SET pg_hint_plan.parse_messages TO debug3;
-DEBUG: StartTransactionCommand
-DEBUG: StartTransaction
-DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
-DEBUG: ProcessUtility
-DEBUG: CommitTransactionCommand
-DEBUG: CommitTransaction
-DEBUG: name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
SHOW pg_hint_plan.parse_messages;
-DEBUG: StartTransactionCommand
-DEBUG: StartTransaction
-DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
-DEBUG: ProcessUtility
-DEBUG: CommitTransactionCommand
-DEBUG: CommitTransaction
-DEBUG: name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
pg_hint_plan.parse_messages
-----------------------------
debug3
(1 row)
/*+Set*/SELECT 1;
-DEBUG: StartTransactionCommand
-DEBUG: StartTransaction
-DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
DEBUG: pg_hint_plan: hint syntax error at or near ""
DETAIL: Opening parenthesis is necessary.
-DEBUG: CommitTransactionCommand
-DEBUG: CommitTransaction
-DEBUG: name: unnamed; blockState: STARTED; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
?column?
----------
1
(1 row)
SET client_min_messages TO debug2;
-DEBUG: StartTransactionCommand
-DEBUG: StartTransaction
-DEBUG: name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children:
-DEBUG: ProcessUtility
/*+Set*/SELECT 1;
?column?
----------
ORDER BY 1;
query | calls
--------------------------------------+-------
- SELECT * FROM s1.t1 WHERE t1.c1 = ?; | 3
- SELECT pg_stat_statements_reset(); | 1
+ SELECT * FROM s1.t1 WHERE t1.c1 = $1 | 3
+ SELECT pg_stat_statements_reset() | 1
(2 rows)
----
-- No. A-12-1-1
-- No. A-12-2-1
SELECT name, setting FROM settings;
- name | setting
-----------------------------+-----------
- geqo | on
- geqo_effort | 5
- geqo_generations | 0
- geqo_pool_size | 0
- geqo_seed | 0
- geqo_selection_bias | 2
- geqo_threshold | 12
- constraint_exclusion | partition
- cursor_tuple_fraction | 0.1
- default_statistics_target | 100
- force_parallel_mode | off
- from_collapse_limit | 8
- join_collapse_limit | 8
- cpu_index_tuple_cost | 0.005
- cpu_operator_cost | 0.0025
- cpu_tuple_cost | 0.01
- effective_cache_size | 16384
- min_parallel_relation_size | 1024
- parallel_setup_cost | 1000
- parallel_tuple_cost | 0.1
- random_page_cost | 4
- seq_page_cost | 1
- enable_bitmapscan | on
- enable_hashagg | on
- enable_hashjoin | on
- enable_indexonlyscan | on
- enable_indexscan | on
- enable_material | on
- enable_mergejoin | on
- enable_nestloop | on
- enable_seqscan | on
- enable_sort | on
- enable_tidscan | on
- client_min_messages | log
-(34 rows)
+ name | setting
+------------------------------+-----------
+ geqo | on
+ geqo_effort | 5
+ geqo_generations | 0
+ geqo_pool_size | 0
+ geqo_seed | 0
+ geqo_selection_bias | 2
+ geqo_threshold | 12
+ constraint_exclusion | partition
+ cursor_tuple_fraction | 0.1
+ default_statistics_target | 100
+ force_parallel_mode | off
+ from_collapse_limit | 8
+ join_collapse_limit | 8
+ cpu_index_tuple_cost | 0.005
+ cpu_operator_cost | 0.0025
+ cpu_tuple_cost | 0.01
+ effective_cache_size | 16384
+ min_parallel_index_scan_size | 64
+ min_parallel_table_scan_size | 1024
+ parallel_setup_cost | 1000
+ parallel_tuple_cost | 0.1
+ random_page_cost | 4
+ seq_page_cost | 1
+ enable_bitmapscan | on
+ enable_gathermerge | on
+ enable_hashagg | on
+ enable_hashjoin | on
+ enable_indexonlyscan | on
+ enable_indexscan | on
+ enable_material | on
+ enable_mergejoin | on
+ enable_nestloop | on
+ enable_seqscan | on
+ enable_sort | on
+ enable_tidscan | on
+ client_min_messages | log
+(36 rows)
SET pg_hint_plan.parse_messages TO error;
/*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
ERROR: pg_hint_plan: hint syntax error at or near "NestLoop(t1 t1)"
DETAIL: Relation name "t1" is duplicated.
SELECT name, setting FROM settings;
- name | setting
-----------------------------+-----------
- geqo | on
- geqo_effort | 5
- geqo_generations | 0
- geqo_pool_size | 0
- geqo_seed | 0
- geqo_selection_bias | 2
- geqo_threshold | 12
- constraint_exclusion | partition
- cursor_tuple_fraction | 0.1
- default_statistics_target | 100
- force_parallel_mode | off
- from_collapse_limit | 8
- join_collapse_limit | 8
- cpu_index_tuple_cost | 0.005
- cpu_operator_cost | 0.0025
- cpu_tuple_cost | 0.01
- effective_cache_size | 16384
- min_parallel_relation_size | 1024
- parallel_setup_cost | 1000
- parallel_tuple_cost | 0.1
- random_page_cost | 4
- seq_page_cost | 1
- enable_bitmapscan | on
- enable_hashagg | on
- enable_hashjoin | on
- enable_indexonlyscan | on
- enable_indexscan | on
- enable_material | on
- enable_mergejoin | on
- enable_nestloop | on
- enable_seqscan | on
- enable_sort | on
- enable_tidscan | on
- client_min_messages | log
-(34 rows)
+ name | setting
+------------------------------+-----------
+ geqo | on
+ geqo_effort | 5
+ geqo_generations | 0
+ geqo_pool_size | 0
+ geqo_seed | 0
+ geqo_selection_bias | 2
+ geqo_threshold | 12
+ constraint_exclusion | partition
+ cursor_tuple_fraction | 0.1
+ default_statistics_target | 100
+ force_parallel_mode | off
+ from_collapse_limit | 8
+ join_collapse_limit | 8
+ cpu_index_tuple_cost | 0.005
+ cpu_operator_cost | 0.0025
+ cpu_tuple_cost | 0.01
+ effective_cache_size | 16384
+ min_parallel_index_scan_size | 64
+ min_parallel_table_scan_size | 1024
+ parallel_setup_cost | 1000
+ parallel_tuple_cost | 0.1
+ random_page_cost | 4
+ seq_page_cost | 1
+ enable_bitmapscan | on
+ enable_gathermerge | on
+ enable_hashagg | on
+ enable_hashjoin | on
+ enable_indexonlyscan | on
+ enable_indexscan | on
+ enable_material | on
+ enable_mergejoin | on
+ enable_nestloop | on
+ enable_seqscan | on
+ enable_sort | on
+ enable_tidscan | on
+ client_min_messages | log
+(36 rows)
/*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
-- No. A-12-1-2
-- No. A-12-2-2
SELECT name, setting FROM settings;
- name | setting
-----------------------------+-----------
- geqo | on
- geqo_effort | 5
- geqo_generations | 0
- geqo_pool_size | 0
- geqo_seed | 0
- geqo_selection_bias | 2
- geqo_threshold | 12
- constraint_exclusion | partition
- cursor_tuple_fraction | 0.1
- default_statistics_target | 100
- force_parallel_mode | off
- from_collapse_limit | 8
- join_collapse_limit | 8
- cpu_index_tuple_cost | 0.005
- cpu_operator_cost | 0.0025
- cpu_tuple_cost | 0.01
- effective_cache_size | 16384
- min_parallel_relation_size | 1024
- parallel_setup_cost | 1000
- parallel_tuple_cost | 0.1
- random_page_cost | 4
- seq_page_cost | 1
- enable_bitmapscan | on
- enable_hashagg | on
- enable_hashjoin | on
- enable_indexonlyscan | on
- enable_indexscan | on
- enable_material | on
- enable_mergejoin | on
- enable_nestloop | on
- enable_seqscan | on
- enable_sort | on
- enable_tidscan | on
- client_min_messages | log
-(34 rows)
+ name | setting
+------------------------------+-----------
+ geqo | on
+ geqo_effort | 5
+ geqo_generations | 0
+ geqo_pool_size | 0
+ geqo_seed | 0
+ geqo_selection_bias | 2
+ geqo_threshold | 12
+ constraint_exclusion | partition
+ cursor_tuple_fraction | 0.1
+ default_statistics_target | 100
+ force_parallel_mode | off
+ from_collapse_limit | 8
+ join_collapse_limit | 8
+ cpu_index_tuple_cost | 0.005
+ cpu_operator_cost | 0.0025
+ cpu_tuple_cost | 0.01
+ effective_cache_size | 16384
+ min_parallel_index_scan_size | 64
+ min_parallel_table_scan_size | 1024
+ parallel_setup_cost | 1000
+ parallel_tuple_cost | 0.1
+ random_page_cost | 4
+ seq_page_cost | 1
+ enable_bitmapscan | on
+ enable_gathermerge | on
+ enable_hashagg | on
+ enable_hashjoin | on
+ enable_indexonlyscan | on
+ enable_indexscan | on
+ enable_material | on
+ enable_mergejoin | on
+ enable_nestloop | on
+ enable_seqscan | on
+ enable_sort | on
+ enable_tidscan | on
+ client_min_messages | log
+(36 rows)
SET pg_hint_plan.parse_messages TO error;
/*+Set(enable_seqscan off)Set(geqo_threshold 100)SeqScan(t1)MergeJoin(t1 t2)NestLoop(t1 t1)*/
ERROR: pg_hint_plan: hint syntax error at or near "NestLoop(t1 t1)"
DETAIL: Relation name "t1" is duplicated.
SELECT name, setting FROM settings;
- name | setting
-----------------------------+-----------
- geqo | on
- geqo_effort | 5
- geqo_generations | 0
- geqo_pool_size | 0
- geqo_seed | 0
- geqo_selection_bias | 2
- geqo_threshold | 12
- constraint_exclusion | partition
- cursor_tuple_fraction | 0.1
- default_statistics_target | 100
- force_parallel_mode | off
- from_collapse_limit | 8
- join_collapse_limit | 8
- cpu_index_tuple_cost | 0.005
- cpu_operator_cost | 0.0025
- cpu_tuple_cost | 0.01
- effective_cache_size | 16384
- min_parallel_relation_size | 1024
- parallel_setup_cost | 1000
- parallel_tuple_cost | 0.1
- random_page_cost | 4
- seq_page_cost | 1
- enable_bitmapscan | on
- enable_hashagg | on
- enable_hashjoin | on
- enable_indexonlyscan | on
- enable_indexscan | on
- enable_material | on
- enable_mergejoin | on
- enable_nestloop | on
- enable_seqscan | on
- enable_sort | on
- enable_tidscan | on
- client_min_messages | log
-(34 rows)
+ name | setting
+------------------------------+-----------
+ geqo | on
+ geqo_effort | 5
+ geqo_generations | 0
+ geqo_pool_size | 0
+ geqo_seed | 0
+ geqo_selection_bias | 2
+ geqo_threshold | 12
+ constraint_exclusion | partition
+ cursor_tuple_fraction | 0.1
+ default_statistics_target | 100
+ force_parallel_mode | off
+ from_collapse_limit | 8
+ join_collapse_limit | 8
+ cpu_index_tuple_cost | 0.005
+ cpu_operator_cost | 0.0025
+ cpu_tuple_cost | 0.01
+ effective_cache_size | 16384
+ min_parallel_index_scan_size | 64
+ min_parallel_table_scan_size | 1024
+ parallel_setup_cost | 1000
+ parallel_tuple_cost | 0.1
+ random_page_cost | 4
+ seq_page_cost | 1
+ enable_bitmapscan | on
+ enable_gathermerge | on
+ enable_hashagg | on
+ enable_hashjoin | on
+ enable_indexonlyscan | on
+ enable_indexscan | on
+ enable_material | on
+ enable_mergejoin | on
+ enable_nestloop | on
+ enable_seqscan | on
+ enable_sort | on
+ enable_tidscan | on
+ client_min_messages | log
+(36 rows)
EXPLAIN (COSTS false) EXECUTE p1;
QUERY PLAN
-- No. A-12-1-3
-- No. A-12-2-3
SELECT name, setting FROM settings;
- name | setting
-----------------------------+-----------
- geqo | on
- geqo_effort | 5
- geqo_generations | 0
- geqo_pool_size | 0
- geqo_seed | 0
- geqo_selection_bias | 2
- geqo_threshold | 12
- constraint_exclusion | partition
- cursor_tuple_fraction | 0.1
- default_statistics_target | 100
- force_parallel_mode | off
- from_collapse_limit | 8
- join_collapse_limit | 8
- cpu_index_tuple_cost | 0.005
- cpu_operator_cost | 0.0025
- cpu_tuple_cost | 0.01
- effective_cache_size | 16384
- min_parallel_relation_size | 1024
- parallel_setup_cost | 1000
- parallel_tuple_cost | 0.1
- random_page_cost | 4
- seq_page_cost | 1
- enable_bitmapscan | on
- enable_hashagg | on
- enable_hashjoin | on
- enable_indexonlyscan | on
- enable_indexscan | on
- enable_material | on
- enable_mergejoin | on
- enable_nestloop | on
- enable_seqscan | on
- enable_sort | on
- enable_tidscan | on
- client_min_messages | log
-(34 rows)
+ name | setting
+------------------------------+-----------
+ geqo | on
+ geqo_effort | 5
+ geqo_generations | 0
+ geqo_pool_size | 0
+ geqo_seed | 0
+ geqo_selection_bias | 2
+ geqo_threshold | 12
+ constraint_exclusion | partition
+ cursor_tuple_fraction | 0.1
+ default_statistics_target | 100
+ force_parallel_mode | off
+ from_collapse_limit | 8
+ join_collapse_limit | 8
+ cpu_index_tuple_cost | 0.005
+ cpu_operator_cost | 0.0025
+ cpu_tuple_cost | 0.01
+ effective_cache_size | 16384
+ min_parallel_index_scan_size | 64
+ min_parallel_table_scan_size | 1024
+ parallel_setup_cost | 1000
+ parallel_tuple_cost | 0.1
+ random_page_cost | 4
+ seq_page_cost | 1
+ enable_bitmapscan | on
+ enable_gathermerge | on
+ enable_hashagg | on
+ enable_hashjoin | on
+ enable_indexonlyscan | on
+ enable_indexscan | on
+ enable_material | on
+ enable_mergejoin | on
+ enable_nestloop | on
+ enable_seqscan | on
+ enable_sort | on
+ enable_tidscan | on
+ client_min_messages | log
+(36 rows)
SET pg_hint_plan.parse_messages TO error;
EXPLAIN (COSTS false) EXECUTE p2;
(6 rows)
SELECT name, setting FROM settings;
- name | setting
-----------------------------+-----------
- geqo | on
- geqo_effort | 5
- geqo_generations | 0
- geqo_pool_size | 0
- geqo_seed | 0
- geqo_selection_bias | 2
- geqo_threshold | 12
- constraint_exclusion | partition
- cursor_tuple_fraction | 0.1
- default_statistics_target | 100
- force_parallel_mode | off
- from_collapse_limit | 8
- join_collapse_limit | 8
- cpu_index_tuple_cost | 0.005
- cpu_operator_cost | 0.0025
- cpu_tuple_cost | 0.01
- effective_cache_size | 16384
- min_parallel_relation_size | 1024
- parallel_setup_cost | 1000
- parallel_tuple_cost | 0.1
- random_page_cost | 4
- seq_page_cost | 1
- enable_bitmapscan | on
- enable_hashagg | on
- enable_hashjoin | on
- enable_indexonlyscan | on
- enable_indexscan | on
- enable_material | on
- enable_mergejoin | on
- enable_nestloop | on
- enable_seqscan | on
- enable_sort | on
- enable_tidscan | on
- client_min_messages | log
-(34 rows)
+ name | setting
+------------------------------+-----------
+ geqo | on
+ geqo_effort | 5
+ geqo_generations | 0
+ geqo_pool_size | 0
+ geqo_seed | 0
+ geqo_selection_bias | 2
+ geqo_threshold | 12
+ constraint_exclusion | partition
+ cursor_tuple_fraction | 0.1
+ default_statistics_target | 100
+ force_parallel_mode | off
+ from_collapse_limit | 8
+ join_collapse_limit | 8
+ cpu_index_tuple_cost | 0.005
+ cpu_operator_cost | 0.0025
+ cpu_tuple_cost | 0.01
+ effective_cache_size | 16384
+ min_parallel_index_scan_size | 64
+ min_parallel_table_scan_size | 1024
+ parallel_setup_cost | 1000
+ parallel_tuple_cost | 0.1
+ random_page_cost | 4
+ seq_page_cost | 1
+ enable_bitmapscan | on
+ enable_gathermerge | on
+ enable_hashagg | on
+ enable_hashjoin | on
+ enable_indexonlyscan | on
+ enable_indexscan | on
+ enable_material | on
+ enable_mergejoin | on
+ enable_nestloop | on
+ enable_seqscan | on
+ enable_sort | on
+ enable_tidscan | on
+ client_min_messages | log
+(36 rows)
-- No. A-12-1-4
-- No. A-12-2-4
SELECT name, setting FROM settings;
- name | setting
-----------------------------+-----------
- geqo | on
- geqo_effort | 5
- geqo_generations | 0
- geqo_pool_size | 0
- geqo_seed | 0
- geqo_selection_bias | 2
- geqo_threshold | 12
- constraint_exclusion | partition
- cursor_tuple_fraction | 0.1
- default_statistics_target | 100
- force_parallel_mode | off
- from_collapse_limit | 8
- join_collapse_limit | 8
- cpu_index_tuple_cost | 0.005
- cpu_operator_cost | 0.0025
- cpu_tuple_cost | 0.01
- effective_cache_size | 16384
- min_parallel_relation_size | 1024
- parallel_setup_cost | 1000
- parallel_tuple_cost | 0.1
- random_page_cost | 4
- seq_page_cost | 1
- enable_bitmapscan | on
- enable_hashagg | on
- enable_hashjoin | on
- enable_indexonlyscan | on
- enable_indexscan | on
- enable_material | on
- enable_mergejoin | on
- enable_nestloop | on
- enable_seqscan | on
- enable_sort | on
- enable_tidscan | on
- client_min_messages | log
-(34 rows)
+ name | setting
+------------------------------+-----------
+ geqo | on
+ geqo_effort | 5
+ geqo_generations | 0
+ geqo_pool_size | 0
+ geqo_seed | 0
+ geqo_selection_bias | 2
+ geqo_threshold | 12
+ constraint_exclusion | partition
+ cursor_tuple_fraction | 0.1
+ default_statistics_target | 100
+ force_parallel_mode | off
+ from_collapse_limit | 8
+ join_collapse_limit | 8
+ cpu_index_tuple_cost | 0.005
+ cpu_operator_cost | 0.0025
+ cpu_tuple_cost | 0.01
+ effective_cache_size | 16384
+ min_parallel_index_scan_size | 64
+ min_parallel_table_scan_size | 1024
+ parallel_setup_cost | 1000
+ parallel_tuple_cost | 0.1
+ random_page_cost | 4
+ seq_page_cost | 1
+ enable_bitmapscan | on
+ enable_gathermerge | on
+ enable_hashagg | on
+ enable_hashjoin | on
+ enable_indexonlyscan | on
+ enable_indexscan | on
+ enable_material | on
+ enable_mergejoin | on
+ enable_nestloop | on
+ enable_seqscan | on
+ enable_sort | on
+ enable_tidscan | on
+ client_min_messages | log
+(36 rows)
SET pg_hint_plan.parse_messages TO error;
EXPLAIN (COSTS false) EXECUTE p2;
(6 rows)
SELECT name, setting FROM settings;
- name | setting
-----------------------------+-----------
- geqo | on
- geqo_effort | 5
- geqo_generations | 0
- geqo_pool_size | 0
- geqo_seed | 0
- geqo_selection_bias | 2
- geqo_threshold | 12
- constraint_exclusion | partition
- cursor_tuple_fraction | 0.1
- default_statistics_target | 100
- force_parallel_mode | off
- from_collapse_limit | 8
- join_collapse_limit | 8
- cpu_index_tuple_cost | 0.005
- cpu_operator_cost | 0.0025
- cpu_tuple_cost | 0.01
- effective_cache_size | 16384
- min_parallel_relation_size | 1024
- parallel_setup_cost | 1000
- parallel_tuple_cost | 0.1
- random_page_cost | 4
- seq_page_cost | 1
- enable_bitmapscan | on
- enable_hashagg | on
- enable_hashjoin | on
- enable_indexonlyscan | on
- enable_indexscan | on
- enable_material | on
- enable_mergejoin | on
- enable_nestloop | on
- enable_seqscan | on
- enable_sort | on
- enable_tidscan | on
- client_min_messages | log
-(34 rows)
+ name | setting
+------------------------------+-----------
+ geqo | on
+ geqo_effort | 5
+ geqo_generations | 0
+ geqo_pool_size | 0
+ geqo_seed | 0
+ geqo_selection_bias | 2
+ geqo_threshold | 12
+ constraint_exclusion | partition
+ cursor_tuple_fraction | 0.1
+ default_statistics_target | 100
+ force_parallel_mode | off
+ from_collapse_limit | 8
+ join_collapse_limit | 8
+ cpu_index_tuple_cost | 0.005
+ cpu_operator_cost | 0.0025
+ cpu_tuple_cost | 0.01
+ effective_cache_size | 16384
+ min_parallel_index_scan_size | 64
+ min_parallel_table_scan_size | 1024
+ parallel_setup_cost | 1000
+ parallel_tuple_cost | 0.1
+ random_page_cost | 4
+ seq_page_cost | 1
+ enable_bitmapscan | on
+ enable_gathermerge | on
+ enable_hashagg | on
+ enable_hashjoin | on
+ enable_indexonlyscan | on
+ enable_indexscan | on
+ enable_material | on
+ enable_mergejoin | on
+ enable_nestloop | on
+ enable_seqscan | on
+ enable_sort | on
+ enable_tidscan | on
+ client_min_messages | log
+(36 rows)
DEALLOCATE p1;
SET pg_hint_plan.parse_messages TO LOG;
(5 rows)
SELECT name, setting FROM settings;
- name | setting
-----------------------------+-----------
- geqo | on
- geqo_effort | 5
- geqo_generations | 0
- geqo_pool_size | 0
- geqo_seed | 0
- geqo_selection_bias | 2
- geqo_threshold | 12
- constraint_exclusion | partition
- cursor_tuple_fraction | 0.1
- default_statistics_target | 100
- force_parallel_mode | off
- from_collapse_limit | 8
- join_collapse_limit | 8
- cpu_index_tuple_cost | 0.005
- cpu_operator_cost | 0.0025
- cpu_tuple_cost | 0.01
- effective_cache_size | 16384
- min_parallel_relation_size | 1024
- parallel_setup_cost | 1000
- parallel_tuple_cost | 0.1
- random_page_cost | 4
- seq_page_cost | 1
- enable_bitmapscan | on
- enable_hashagg | on
- enable_hashjoin | on
- enable_indexonlyscan | on
- enable_indexscan | off
- enable_material | on
- enable_mergejoin | off
- enable_nestloop | on
- enable_seqscan | on
- enable_sort | on
- enable_tidscan | on
- client_min_messages | log
-(34 rows)
+ name | setting
+------------------------------+-----------
+ geqo | on
+ geqo_effort | 5
+ geqo_generations | 0
+ geqo_pool_size | 0
+ geqo_seed | 0
+ geqo_selection_bias | 2
+ geqo_threshold | 12
+ constraint_exclusion | partition
+ cursor_tuple_fraction | 0.1
+ default_statistics_target | 100
+ force_parallel_mode | off
+ from_collapse_limit | 8
+ join_collapse_limit | 8
+ cpu_index_tuple_cost | 0.005
+ cpu_operator_cost | 0.0025
+ cpu_tuple_cost | 0.01
+ effective_cache_size | 16384
+ min_parallel_index_scan_size | 64
+ min_parallel_table_scan_size | 1024
+ parallel_setup_cost | 1000
+ parallel_tuple_cost | 0.1
+ random_page_cost | 4
+ seq_page_cost | 1
+ enable_bitmapscan | on
+ enable_gathermerge | on
+ enable_hashagg | on
+ enable_hashjoin | on
+ enable_indexonlyscan | on
+ enable_indexscan | off
+ enable_material | on
+ enable_mergejoin | off
+ enable_nestloop | on
+ enable_seqscan | on
+ enable_sort | on
+ enable_tidscan | on
+ client_min_messages | log
+(36 rows)
/*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
(4 rows)
SELECT name, setting FROM settings;
- name | setting
-----------------------------+-----------
- geqo | on
- geqo_effort | 5
- geqo_generations | 0
- geqo_pool_size | 0
- geqo_seed | 0
- geqo_selection_bias | 2
- geqo_threshold | 12
- constraint_exclusion | partition
- cursor_tuple_fraction | 0.1
- default_statistics_target | 100
- force_parallel_mode | off
- from_collapse_limit | 8
- join_collapse_limit | 8
- cpu_index_tuple_cost | 0.005
- cpu_operator_cost | 0.0025
- cpu_tuple_cost | 0.01
- effective_cache_size | 16384
- min_parallel_relation_size | 1024
- parallel_setup_cost | 1000
- parallel_tuple_cost | 0.1
- random_page_cost | 4
- seq_page_cost | 1
- enable_bitmapscan | on
- enable_hashagg | on
- enable_hashjoin | on
- enable_indexonlyscan | on
- enable_indexscan | off
- enable_material | on
- enable_mergejoin | off
- enable_nestloop | on
- enable_seqscan | on
- enable_sort | on
- enable_tidscan | on
- client_min_messages | log
-(34 rows)
+ name | setting
+------------------------------+-----------
+ geqo | on
+ geqo_effort | 5
+ geqo_generations | 0
+ geqo_pool_size | 0
+ geqo_seed | 0
+ geqo_selection_bias | 2
+ geqo_threshold | 12
+ constraint_exclusion | partition
+ cursor_tuple_fraction | 0.1
+ default_statistics_target | 100
+ force_parallel_mode | off
+ from_collapse_limit | 8
+ join_collapse_limit | 8
+ cpu_index_tuple_cost | 0.005
+ cpu_operator_cost | 0.0025
+ cpu_tuple_cost | 0.01
+ effective_cache_size | 16384
+ min_parallel_index_scan_size | 64
+ min_parallel_table_scan_size | 1024
+ parallel_setup_cost | 1000
+ parallel_tuple_cost | 0.1
+ random_page_cost | 4
+ seq_page_cost | 1
+ enable_bitmapscan | on
+ enable_gathermerge | on
+ enable_hashagg | on
+ enable_hashjoin | on
+ enable_indexonlyscan | on
+ enable_indexscan | off
+ enable_material | on
+ enable_mergejoin | off
+ enable_nestloop | on
+ enable_seqscan | on
+ enable_sort | on
+ enable_tidscan | on
+ client_min_messages | log
+(36 rows)
EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
QUERY PLAN
(5 rows)
SELECT name, setting FROM settings;
- name | setting
-----------------------------+-----------
- geqo | on
- geqo_effort | 5
- geqo_generations | 0
- geqo_pool_size | 0
- geqo_seed | 0
- geqo_selection_bias | 2
- geqo_threshold | 12
- constraint_exclusion | partition
- cursor_tuple_fraction | 0.1
- default_statistics_target | 100
- force_parallel_mode | off
- from_collapse_limit | 8
- join_collapse_limit | 8
- cpu_index_tuple_cost | 0.005
- cpu_operator_cost | 0.0025
- cpu_tuple_cost | 0.01
- effective_cache_size | 16384
- min_parallel_relation_size | 1024
- parallel_setup_cost | 1000
- parallel_tuple_cost | 0.1
- random_page_cost | 4
- seq_page_cost | 1
- enable_bitmapscan | on
- enable_hashagg | on
- enable_hashjoin | on
- enable_indexonlyscan | on
- enable_indexscan | off
- enable_material | on
- enable_mergejoin | off
- enable_nestloop | on
- enable_seqscan | on
- enable_sort | on
- enable_tidscan | on
- client_min_messages | log
-(34 rows)
+ name | setting
+------------------------------+-----------
+ geqo | on
+ geqo_effort | 5
+ geqo_generations | 0
+ geqo_pool_size | 0
+ geqo_seed | 0
+ geqo_selection_bias | 2
+ geqo_threshold | 12
+ constraint_exclusion | partition
+ cursor_tuple_fraction | 0.1
+ default_statistics_target | 100
+ force_parallel_mode | off
+ from_collapse_limit | 8
+ join_collapse_limit | 8
+ cpu_index_tuple_cost | 0.005
+ cpu_operator_cost | 0.0025
+ cpu_tuple_cost | 0.01
+ effective_cache_size | 16384
+ min_parallel_index_scan_size | 64
+ min_parallel_table_scan_size | 1024
+ parallel_setup_cost | 1000
+ parallel_tuple_cost | 0.1
+ random_page_cost | 4
+ seq_page_cost | 1
+ enable_bitmapscan | on
+ enable_gathermerge | on
+ enable_hashagg | on
+ enable_hashjoin | on
+ enable_indexonlyscan | on
+ enable_indexscan | off
+ enable_material | on
+ enable_mergejoin | off
+ enable_nestloop | on
+ enable_seqscan | on
+ enable_sort | on
+ enable_tidscan | on
+ client_min_messages | log
+(36 rows)
BEGIN;
/*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
COMMIT;
BEGIN;
SELECT name, setting FROM settings;
- name | setting
-----------------------------+-----------
- geqo | on
- geqo_effort | 5
- geqo_generations | 0
- geqo_pool_size | 0
- geqo_seed | 0
- geqo_selection_bias | 2
- geqo_threshold | 12
- constraint_exclusion | partition
- cursor_tuple_fraction | 0.1
- default_statistics_target | 100
- force_parallel_mode | off
- from_collapse_limit | 8
- join_collapse_limit | 8
- cpu_index_tuple_cost | 0.005
- cpu_operator_cost | 0.0025
- cpu_tuple_cost | 0.01
- effective_cache_size | 16384
- min_parallel_relation_size | 1024
- parallel_setup_cost | 1000
- parallel_tuple_cost | 0.1
- random_page_cost | 4
- seq_page_cost | 1
- enable_bitmapscan | on
- enable_hashagg | on
- enable_hashjoin | on
- enable_indexonlyscan | on
- enable_indexscan | off
- enable_material | on
- enable_mergejoin | off
- enable_nestloop | on
- enable_seqscan | on
- enable_sort | on
- enable_tidscan | on
- client_min_messages | log
-(34 rows)
+ name | setting
+------------------------------+-----------
+ geqo | on
+ geqo_effort | 5
+ geqo_generations | 0
+ geqo_pool_size | 0
+ geqo_seed | 0
+ geqo_selection_bias | 2
+ geqo_threshold | 12
+ constraint_exclusion | partition
+ cursor_tuple_fraction | 0.1
+ default_statistics_target | 100
+ force_parallel_mode | off
+ from_collapse_limit | 8
+ join_collapse_limit | 8
+ cpu_index_tuple_cost | 0.005
+ cpu_operator_cost | 0.0025
+ cpu_tuple_cost | 0.01
+ effective_cache_size | 16384
+ min_parallel_index_scan_size | 64
+ min_parallel_table_scan_size | 1024
+ parallel_setup_cost | 1000
+ parallel_tuple_cost | 0.1
+ random_page_cost | 4
+ seq_page_cost | 1
+ enable_bitmapscan | on
+ enable_gathermerge | on
+ enable_hashagg | on
+ enable_hashjoin | on
+ enable_indexonlyscan | on
+ enable_indexscan | off
+ enable_material | on
+ enable_mergejoin | off
+ enable_nestloop | on
+ enable_seqscan | on
+ enable_sort | on
+ enable_tidscan | on
+ client_min_messages | log
+(36 rows)
EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
QUERY PLAN
(5 rows)
SELECT name, setting FROM settings;
- name | setting
-----------------------------+-----------
- geqo | on
- geqo_effort | 5
- geqo_generations | 0
- geqo_pool_size | 0
- geqo_seed | 0
- geqo_selection_bias | 2
- geqo_threshold | 12
- constraint_exclusion | partition
- cursor_tuple_fraction | 0.1
- default_statistics_target | 100
- force_parallel_mode | off
- from_collapse_limit | 8
- join_collapse_limit | 8
- cpu_index_tuple_cost | 0.005
- cpu_operator_cost | 0.0025
- cpu_tuple_cost | 0.01
- effective_cache_size | 16384
- min_parallel_relation_size | 1024
- parallel_setup_cost | 1000
- parallel_tuple_cost | 0.1
- random_page_cost | 4
- seq_page_cost | 1
- enable_bitmapscan | on
- enable_hashagg | on
- enable_hashjoin | on
- enable_indexonlyscan | on
- enable_indexscan | off
- enable_material | on
- enable_mergejoin | off
- enable_nestloop | on
- enable_seqscan | on
- enable_sort | on
- enable_tidscan | on
- client_min_messages | log
-(34 rows)
+ name | setting
+------------------------------+-----------
+ geqo | on
+ geqo_effort | 5
+ geqo_generations | 0
+ geqo_pool_size | 0
+ geqo_seed | 0
+ geqo_selection_bias | 2
+ geqo_threshold | 12
+ constraint_exclusion | partition
+ cursor_tuple_fraction | 0.1
+ default_statistics_target | 100
+ force_parallel_mode | off
+ from_collapse_limit | 8
+ join_collapse_limit | 8
+ cpu_index_tuple_cost | 0.005
+ cpu_operator_cost | 0.0025
+ cpu_tuple_cost | 0.01
+ effective_cache_size | 16384
+ min_parallel_index_scan_size | 64
+ min_parallel_table_scan_size | 1024
+ parallel_setup_cost | 1000
+ parallel_tuple_cost | 0.1
+ random_page_cost | 4
+ seq_page_cost | 1
+ enable_bitmapscan | on
+ enable_gathermerge | on
+ enable_hashagg | on
+ enable_hashjoin | on
+ enable_indexonlyscan | on
+ enable_indexscan | off
+ enable_material | on
+ enable_mergejoin | off
+ enable_nestloop | on
+ enable_seqscan | on
+ enable_sort | on
+ enable_tidscan | on
+ client_min_messages | log
+(36 rows)
/*+Set(enable_indexscan on)Set(geqo_threshold 100)IndexScan(t2)MergeJoin(t1 t2)Leading(t2 t1)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
SET enable_mergejoin TO off;
LOAD 'pg_hint_plan';
SELECT name, setting FROM settings;
- name | setting
-----------------------------+-----------
- geqo | on
- geqo_effort | 5
- geqo_generations | 0
- geqo_pool_size | 0
- geqo_seed | 0
- geqo_selection_bias | 2
- geqo_threshold | 12
- constraint_exclusion | partition
- cursor_tuple_fraction | 0.1
- default_statistics_target | 100
- force_parallel_mode | off
- from_collapse_limit | 8
- join_collapse_limit | 8
- cpu_index_tuple_cost | 0.005
- cpu_operator_cost | 0.0025
- cpu_tuple_cost | 0.01
- effective_cache_size | 16384
- min_parallel_relation_size | 1024
- parallel_setup_cost | 1000
- parallel_tuple_cost | 0.1
- random_page_cost | 4
- seq_page_cost | 1
- enable_bitmapscan | on
- enable_hashagg | on
- enable_hashjoin | on
- enable_indexonlyscan | on
- enable_indexscan | off
- enable_material | on
- enable_mergejoin | off
- enable_nestloop | on
- enable_seqscan | on
- enable_sort | on
- enable_tidscan | on
- client_min_messages | notice
-(34 rows)
+ name | setting
+------------------------------+-----------
+ geqo | on
+ geqo_effort | 5
+ geqo_generations | 0
+ geqo_pool_size | 0
+ geqo_seed | 0
+ geqo_selection_bias | 2
+ geqo_threshold | 12
+ constraint_exclusion | partition
+ cursor_tuple_fraction | 0.1
+ default_statistics_target | 100
+ force_parallel_mode | off
+ from_collapse_limit | 8
+ join_collapse_limit | 8
+ cpu_index_tuple_cost | 0.005
+ cpu_operator_cost | 0.0025
+ cpu_tuple_cost | 0.01
+ effective_cache_size | 16384
+ min_parallel_index_scan_size | 64
+ min_parallel_table_scan_size | 1024
+ parallel_setup_cost | 1000
+ parallel_tuple_cost | 0.1
+ random_page_cost | 4
+ seq_page_cost | 1
+ enable_bitmapscan | on
+ enable_gathermerge | on
+ enable_hashagg | on
+ enable_hashjoin | on
+ enable_indexonlyscan | on
+ enable_indexscan | off
+ enable_material | on
+ enable_mergejoin | off
+ enable_nestloop | on
+ enable_seqscan | on
+ enable_sort | on
+ enable_tidscan | on
+ client_min_messages | notice
+(36 rows)
EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
QUERY PLAN
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r1
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
(19 rows)
/*+
Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r1_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
(19 rows)
/*+
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r2
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r2
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
(39 rows)
/*+
Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r2_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r2_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
(39 rows)
/*+
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
(59 rows)
/*+
Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (b3t1.c1 = b3t4.c1)
+ -> Tid Scan on t4 b3t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t3.c1)
+ -> Tid Scan on t3 b3t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t2.c1)
+ -> Seq Scan on t2 b3t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b3t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b3t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b3t4
- TID Cond: (ctid = '(1,1)'::tid)
(59 rows)
/*+
QUERY PLAN
------------------------------------------------
Nested Loop
- Join Filter: (t1.c1 = t4.c1)
-> Merge Join
Merge Cond: (t1.c1 = t2.c1)
-> Merge Join
Sort Key: t2.c1
-> Seq Scan on t2
-> Index Scan using t4_i1 on t4
- Index Cond: (c1 = t3.c1)
-(13 rows)
+ Index Cond: (c1 = t1.c1)
+(12 rows)
----
---- No. J-1-6 object type for the hint
)
FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
;
- QUERY PLAN
--------------------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------------------
Aggregate
InitPlan 1 (returns $0)
-> Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt2.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
-(47 rows)
+ -> Materialize
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
+(50 rows)
/*+
Leading(bmt1 bmt2 bmt3 bmt4)
-> Aggregate
-> Nested Loop
Join Filter: (b1t2.c1 = b1t1.c1)
+ -> Tid Scan on t1 b1t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b1t4.c1 = b1t2.c1)
-> Tid Scan on t4 b1t4
Sort Key: b1t3.c1
-> Tid Scan on t3 b1t3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 b1t1
- TID Cond: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b2t1.c1 = b2t3.c1)
-> Tid Scan on t1 b2t1
Sort Key: b2t4.c1
-> Tid Scan on t4 b2t4
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (bmt3.c1 = bmt1.c1)
-> Tid Scan on t3 bmt3
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
(62 rows)
-- No. J-2-1-2
)
FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
;
- QUERY PLAN
--------------------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------------------
Aggregate
InitPlan 1 (returns $0)
-> Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 3 (returns $2)
-> Aggregate
-> Nested Loop
Join Filter: (b3t1.c1 = b3t4.c1)
+ -> Tid Scan on t4 b3t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t3.c1)
+ -> Tid Scan on t3 b3t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t2.c1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b3t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b3t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b3t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b3t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt2.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
-(63 rows)
+ -> Materialize
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
+(67 rows)
/*+
Leading(bmt1 bmt2 bmt3 bmt4)
-> Aggregate
-> Nested Loop
Join Filter: (b1t2.c1 = b1t1.c1)
+ -> Tid Scan on t1 b1t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b1t4.c1 = b1t2.c1)
-> Tid Scan on t4 b1t4
Sort Key: b1t3.c1
-> Tid Scan on t3 b1t3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 b1t1
- TID Cond: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b2t1.c1 = b2t3.c1)
-> Tid Scan on t1 b2t1
Sort Key: b2t4.c1
-> Tid Scan on t4 b2t4
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
InitPlan 3 (returns $2)
-> Aggregate
-> Nested Loop
Join Filter: (b3t1.c1 = b3t3.c1)
+ -> Tid Scan on t3 b3t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b3t2.c1 = b3t1.c1)
-> Seq Scan on t2 b3t2
Sort Key: b3t4.c1
-> Tid Scan on t4 b3t4
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b3t3
- TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (bmt3.c1 = bmt1.c1)
-> Tid Scan on t3 bmt3
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
(83 rows)
-- No. J-2-1-3
EXPLAIN (COSTS false) SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = sbmt3.c1 AND sbmt3.ctid = '(1,1)' AND bmt1.c1 = sbmt4.c1 AND sbmt4.ctid = '(1,1)';
- QUERY PLAN
------------------------------------------------------------
+ QUERY PLAN
+---------------------------------------------------------------
Aggregate
-> Nested Loop
Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt2.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
-(15 rows)
+ -> Materialize
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
+(16 rows)
/*+
Leading(bmt4 bmt3 bmt2 bmt1)
Aggregate
-> Nested Loop
Join Filter: (bmt2.c1 = bmt1.c1)
+ -> Tid Scan on t1 bmt1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (bmt2.c1 = bmt3.c1)
-> Seq Scan on t2 bmt2
Sort Key: bmt4.c1
-> Tid Scan on t4 bmt4
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 bmt1
- TID Cond: (ctid = '(1,1)'::tid)
(20 rows)
-- No. J-2-1-4
EXPLAIN (COSTS false) SELECT max(bmt1.c1) FROM s1.t1 bmt1, (SELECT ctid, * FROM s1.t2 bmt2) sbmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = sbmt2.c1 AND sbmt2.ctid = '(1,1)' AND bmt1.c1 = sbmt3.c1 AND sbmt3.ctid = '(1,1)' AND bmt1.c1 = sbmt4.c1 AND sbmt4.ctid = '(1,1)';
- QUERY PLAN
------------------------------------------------------------
+ QUERY PLAN
+---------------------------------------------------------------
Aggregate
-> Nested Loop
Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt2.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
-(15 rows)
+ -> Materialize
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
+(16 rows)
/*+
Leading(bmt4 bmt3 bmt2 bmt1)
Aggregate
-> Nested Loop
Join Filter: (bmt2.c1 = bmt1.c1)
+ -> Tid Scan on t1 bmt1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (bmt2.c1 = bmt3.c1)
-> Seq Scan on t2 bmt2
Sort Key: bmt4.c1
-> Tid Scan on t4 bmt4
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 bmt1
- TID Cond: (ctid = '(1,1)'::tid)
(20 rows)
-- No. J-2-1-5
SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
)
;
- QUERY PLAN
--------------------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------------------
Aggregate
InitPlan 1 (returns $0)
-> Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt2.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
Filter: ((c1 <> $0) AND (c1 <> $1))
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
-(48 rows)
+ -> Materialize
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
+(51 rows)
/*+
Leading(bmt1 bmt2 bmt3 bmt4)
-> Aggregate
-> Nested Loop
Join Filter: (b1t2.c1 = b1t1.c1)
+ -> Tid Scan on t1 b1t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b1t4.c1 = b1t2.c1)
-> Tid Scan on t4 b1t4
Sort Key: b1t3.c1
-> Tid Scan on t3 b1t3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 b1t1
- TID Cond: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b2t1.c1 = b2t3.c1)
-> Tid Scan on t1 b2t1
Sort Key: b2t4.c1
-> Tid Scan on t4 b2t4
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (bmt3.c1 = bmt1.c1)
-> Tid Scan on t3 bmt3
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
(63 rows)
-- No. J-2-1-6
-> Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 3 (returns $2)
-> Aggregate
-> Nested Loop
Join Filter: (b3t1.c1 = b3t4.c1)
+ -> Tid Scan on t4 b3t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t3.c1)
+ -> Tid Scan on t3 b3t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t2.c1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b3t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b3t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b3t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b3t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt2.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
Filter: ((c1 <> $0) AND (c1 <> $1) AND (c1 <> $2))
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
-(64 rows)
+ -> Materialize
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
+(68 rows)
/*+
Leading(bmt1 bmt2 bmt3 bmt4)
-> Aggregate
-> Nested Loop
Join Filter: (b1t2.c1 = b1t1.c1)
+ -> Tid Scan on t1 b1t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b1t4.c1 = b1t2.c1)
-> Tid Scan on t4 b1t4
Sort Key: b1t3.c1
-> Tid Scan on t3 b1t3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 b1t1
- TID Cond: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b2t1.c1 = b2t3.c1)
-> Tid Scan on t1 b2t1
Sort Key: b2t4.c1
-> Tid Scan on t4 b2t4
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
InitPlan 3 (returns $2)
-> Aggregate
-> Nested Loop
Join Filter: (b3t1.c1 = b3t3.c1)
+ -> Tid Scan on t3 b3t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b3t2.c1 = b3t1.c1)
-> Seq Scan on t2 b3t2
Sort Key: b3t4.c1
-> Tid Scan on t4 b3t4
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b3t3
- TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (bmt3.c1 = bmt1.c1)
-> Tid Scan on t3 bmt3
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
(84 rows)
-- No. J-2-1-7
-> Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
CTE c2
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = c2.c1)
-> Nested Loop
- Join Filter: (bmt1.c1 = c1.c1)
+ Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt4.c1)
+ Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt3.c1)
+ Join Filter: (bmt1.c1 = bmt2.c1)
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt2.c1)
+ Join Filter: (bmt1.c1 = c1.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
- -> CTE Scan on c1
+ -> CTE Scan on c1
-> CTE Scan on c2
-(53 rows)
+(55 rows)
/*+
Leading(c2 c1 bmt1 bmt2 bmt3 bmt4)
-> Aggregate
-> Nested Loop
Join Filter: (b1t2.c1 = b1t1.c1)
+ -> Tid Scan on t1 b1t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b1t4.c1 = b1t2.c1)
-> Tid Scan on t4 b1t4
Sort Key: b1t3.c1
-> Tid Scan on t3 b1t3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 b1t1
- TID Cond: (ctid = '(1,1)'::tid)
CTE c2
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b2t1.c1 = b2t3.c1)
-> Tid Scan on t1 b2t1
Sort Key: b2t4.c1
-> Tid Scan on t4 b2t4
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (bmt4.c1 = bmt1.c1)
-> Tid Scan on t4 bmt4
Sort Key: bmt1.c1
-> Nested Loop
Join Filter: (bmt1.c1 = bmt2.c1)
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (bmt1.c1 = c1.c1)
-> Tid Scan on t1 bmt1
-> Sort
Sort Key: c2.c1
-> CTE Scan on c2
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
-> Sort
Sort Key: bmt3.c1
-> Tid Scan on t3 bmt3
-> Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
CTE c2
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
CTE c3
-> Aggregate
-> Nested Loop
Join Filter: (b3t1.c1 = b3t4.c1)
+ -> Tid Scan on t4 b3t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t3.c1)
+ -> Tid Scan on t3 b3t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t2.c1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b3t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b3t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b3t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b3t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = c3.c1)
-> Nested Loop
Join Filter: (bmt1.c1 = c2.c1)
-> Nested Loop
- Join Filter: (bmt1.c1 = c1.c1)
+ Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt4.c1)
+ Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt3.c1)
+ Join Filter: (bmt1.c1 = bmt2.c1)
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt2.c1)
+ Join Filter: (bmt1.c1 = c1.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
- -> CTE Scan on c1
+ -> CTE Scan on c1
-> CTE Scan on c2
-> CTE Scan on c3
-(72 rows)
+(75 rows)
/*+
Leading(c3 c2 c1 bmt1 bmt2 bmt3 bmt4)
-> Aggregate
-> Nested Loop
Join Filter: (b1t2.c1 = b1t1.c1)
+ -> Tid Scan on t1 b1t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b1t4.c1 = b1t2.c1)
-> Tid Scan on t4 b1t4
Sort Key: b1t3.c1
-> Tid Scan on t3 b1t3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 b1t1
- TID Cond: (ctid = '(1,1)'::tid)
CTE c2
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b2t1.c1 = b2t3.c1)
-> Tid Scan on t1 b2t1
Sort Key: b2t4.c1
-> Tid Scan on t4 b2t4
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
CTE c3
-> Aggregate
-> Nested Loop
Join Filter: (b3t1.c1 = b3t3.c1)
+ -> Tid Scan on t3 b3t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b3t2.c1 = b3t1.c1)
-> Seq Scan on t2 b3t2
Sort Key: b3t4.c1
-> Tid Scan on t4 b3t4
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b3t3
- TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (bmt3.c1 = bmt1.c1)
-> Tid Scan on t3 bmt3
Sort Key: bmt1.c1
-> Nested Loop
Join Filter: (c1.c1 = bmt1.c1)
+ -> Tid Scan on t1 bmt1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (c2.c1 = c1.c1)
-> Merge Join
-> CTE Scan on c3
-> Hash
-> CTE Scan on c1
- -> Tid Scan on t1 bmt1
- TID Cond: (ctid = '(1,1)'::tid)
-> Sort
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
(97 rows)
----
SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)'
)
;
- QUERY PLAN
--------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------
Aggregate
CTE c1
-> Aggregate
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 3 (returns $2)
-> Aggregate
-> Nested Loop
Join Filter: (b3t1.c1 = b3t2.c1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b3t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b3t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = c1.c1)
+ Join Filter: (bmt1.c1 = bmt2.c1)
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt2.c1)
+ Join Filter: (bmt1.c1 = c1.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 <> $2)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> CTE Scan on c1
-(35 rows)
+ -> CTE Scan on c1
+(38 rows)
/*+
Leading(c1 bmt2 bmt1)
SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)' AND b3t1.c1 = b3t3.c1 AND b3t3.ctid = '(1,1)' AND b3t1.c1 = b3t4.c1 AND b3t4.ctid = '(1,1)'
)
;
- QUERY PLAN
--------------------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------------------
Aggregate
CTE c1
-> Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 3 (returns $2)
-> Aggregate
-> Nested Loop
Join Filter: (b3t1.c1 = b3t4.c1)
+ -> Tid Scan on t4 b3t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t3.c1)
+ -> Tid Scan on t3 b3t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t2.c1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b3t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b3t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b3t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b3t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = c1.c1)
+ Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt4.c1)
+ Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt3.c1)
+ Join Filter: (bmt1.c1 = bmt2.c1)
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt2.c1)
+ Join Filter: (bmt1.c1 = c1.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 <> $2)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
- -> CTE Scan on c1
-(67 rows)
+ -> CTE Scan on c1
+(70 rows)
/*+
Leading(c1 bmt4 bmt3 bmt2 bmt1)
Sort Key: b1t2.c1
-> Nested Loop
Join Filter: (b1t3.c1 = b1t2.c1)
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b1t3.c1 = b1t4.c1)
-> Tid Scan on t3 b1t3
-> Hash
-> Tid Scan on t4 b1t4
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
-> Sort
Sort Key: b1t1.c1
-> Tid Scan on t1 b1t1
Sort Key: b2t2.c1
-> Nested Loop
Join Filter: (b2t3.c1 = b2t2.c1)
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b2t3.c1 = b2t4.c1)
-> Tid Scan on t3 b2t3
-> Hash
-> Tid Scan on t4 b2t4
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
-> Sort
Sort Key: b2t1.c1
-> Tid Scan on t1 b2t1
Sort Key: b3t2.c1
-> Nested Loop
Join Filter: (b3t3.c1 = b3t2.c1)
+ -> Seq Scan on t2 b3t2
+ Filter: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b3t3.c1 = b3t4.c1)
-> Tid Scan on t3 b3t3
-> Hash
-> Tid Scan on t4 b3t4
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b3t2
- Filter: (ctid = '(1,1)'::tid)
-> Sort
Sort Key: b3t1.c1
-> Tid Scan on t1 b3t1
Sort Key: bmt2.c1
-> Nested Loop
Join Filter: (bmt3.c1 = bmt2.c1)
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (bmt3.c1 = bmt4.c1)
-> Tid Scan on t3 bmt3
-> Sort
Sort Key: c1.c1
-> CTE Scan on c1
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
-> Sort
Sort Key: bmt1.c1
-> Tid Scan on t1 bmt1
SELECT max(b3t1.c1) FROM s1.t1 b3t1 WHERE b3t1.ctid = '(1,1)'
)
;
- QUERY PLAN
--------------------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------------------
Aggregate
CTE c1
-> Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 3 (returns $2)
-> Result
InitPlan 2 (returns $1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = c1.c1)
+ Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt4.c1)
+ Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt3.c1)
+ Join Filter: (bmt1.c1 = bmt2.c1)
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt2.c1)
+ Join Filter: (bmt1.c1 = c1.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 <> $4)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
- -> CTE Scan on c1
-(46 rows)
+ -> CTE Scan on c1
+(47 rows)
/*+
Leading(c1 bmt4 bmt3 bmt2 bmt1)
-> Aggregate
-> Nested Loop
Join Filter: (b1t2.c1 = b1t1.c1)
+ -> Tid Scan on t1 b1t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b1t2.c1 = b1t3.c1)
-> Seq Scan on t2 b1t2
Sort Key: b1t4.c1
-> Tid Scan on t4 b1t4
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 b1t1
- TID Cond: (ctid = '(1,1)'::tid)
InitPlan 3 (returns $2)
-> Result
InitPlan 2 (returns $1)
Sort Key: bmt2.c1
-> Nested Loop
Join Filter: (bmt3.c1 = bmt2.c1)
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (bmt3.c1 = bmt4.c1)
-> Tid Scan on t3 bmt3
-> Sort
Sort Key: c1.c1
-> CTE Scan on c1
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
-> Sort
Sort Key: bmt1.c1
-> Tid Scan on t1 bmt1
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r1
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
(19 rows)
/*+
Sort Key: t4.c1
-> Tid Scan on t4
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Tid Scan on r1
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-(24 rows)
+(25 rows)
EXPLAIN (COSTS false) UPDATE s1.r1_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
QUERY PLAN
Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r1_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
(19 rows)
/*+
Sort Key: b1t4.c1
-> Tid Scan on t4 b1t4
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
-> Tid Scan on r1_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-(24 rows)
+(25 rows)
-- No. J-2-3-2
EXPLAIN (COSTS false) UPDATE s1.r2 SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r2
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r2
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
(39 rows)
/*+
Sort Key: t4.c1
-> Tid Scan on t4
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Tid Scan on r2
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
Sort Key: t4.c1
-> Tid Scan on t4
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Tid Scan on r2
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-(49 rows)
+(51 rows)
EXPLAIN (COSTS false) UPDATE s1.r2_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
QUERY PLAN
Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r2_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r2_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
(39 rows)
/*+
-> Nested Loop
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b1t3.c1 = b1t1.c1)
-> Tid Scan on t3 b1t3
Sort Key: b1t2.c1
-> Seq Scan on t2 b1t2
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
-> Tid Scan on r2_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Nested Loop
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b2t3.c1 = b2t1.c1)
-> Tid Scan on t3 b2t3
Sort Key: b2t2.c1
-> Seq Scan on t2 b2t2
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
-> Tid Scan on r2_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
(59 rows)
/*+
Sort Key: t4.c1
-> Tid Scan on t4
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Tid Scan on r3
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
Sort Key: t4.c1
-> Tid Scan on t4
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Tid Scan on r3
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
Sort Key: t4.c1
-> Tid Scan on t4
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Tid Scan on r3
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-(74 rows)
+(77 rows)
EXPLAIN (COSTS false) UPDATE s1.r3_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
QUERY PLAN
Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (b3t1.c1 = b3t4.c1)
+ -> Tid Scan on t4 b3t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t3.c1)
+ -> Tid Scan on t3 b3t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t2.c1)
+ -> Seq Scan on t2 b3t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b3t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b3t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b3t4
- TID Cond: (ctid = '(1,1)'::tid)
(59 rows)
/*+
-> Nested Loop
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b1t3.c1 = b1t1.c1)
-> Tid Scan on t3 b1t3
Sort Key: b1t2.c1
-> Seq Scan on t2 b1t2
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
-> Tid Scan on r3_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Nested Loop
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b2t3.c1 = b2t1.c1)
-> Tid Scan on t3 b2t3
Sort Key: b2t2.c1
-> Seq Scan on t2 b2t2
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
-> Tid Scan on r3_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Nested Loop
-> Nested Loop
Join Filter: (b3t1.c1 = b3t4.c1)
+ -> Tid Scan on t4 b3t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash Join
Hash Cond: (b3t3.c1 = b3t1.c1)
-> Tid Scan on t3 b3t3
Sort Key: b3t2.c1
-> Seq Scan on t2 b3t2
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b3t4
- TID Cond: (ctid = '(1,1)'::tid)
-> Tid Scan on r3_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
SET enable_mergejoin TO on;
EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1 AND t1.ctid = '(1,1)';;
- QUERY PLAN
------------------------------------------
+ QUERY PLAN
+-----------------------------------------------
Nested Loop
Join Filter: (t1.c1 = t2.c1)
- -> Tid Scan on t1
- TID Cond: (ctid = '(1,1)'::tid)
-> Seq Scan on t2
-(5 rows)
+ -> Materialize
+ -> Tid Scan on t1
+ TID Cond: (ctid = '(1,1)'::tid)
+(6 rows)
/*+NoNestLoop(t1 t2)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1 AND t1.ctid = '(1,1)';;
QUERY PLAN
------------------------------------------------
Nested Loop
- Join Filter: (t1.c1 = t4.c1)
-> Merge Join
Merge Cond: (t1.c1 = t2.c1)
-> Merge Join
Sort Key: t2.c1
-> Seq Scan on t2
-> Index Scan using t4_i1 on t4
- Index Cond: (c1 = t3.c1)
-(13 rows)
+ Index Cond: (c1 = t1.c1)
+(12 rows)
----
---- No. L-1-1 specified pattern of the object name
QUERY PLAN
----------------------------------------------------
Nested Loop
- Join Filter: (t_1.c1 = t_4.c1)
-> Merge Join
Merge Cond: (t_1.c1 = t_2.c1)
-> Merge Join
Sort Key: t_2.c1
-> Seq Scan on t2 t_2
-> Index Scan using t4_i1 on t4 t_4
- Index Cond: (c1 = t_3.c1)
-(13 rows)
+ Index Cond: (c1 = t_1.c1)
+(12 rows)
-- No. L-1-1-3
/*+Leading(t_4 t_2 t_3 t_1)*/
QUERY PLAN
------------------------------------------------
Nested Loop
- Join Filter: (t1.c1 = t4.c1)
-> Merge Join
Merge Cond: (t1.c1 = t2.c1)
-> Merge Join
Sort Key: t2.c1
-> Seq Scan on t2
-> Index Scan using t4_i1 on t4
- Index Cond: (c1 = t3.c1)
-(13 rows)
+ Index Cond: (c1 = t1.c1)
+(12 rows)
----
---- No. L-1-3 table doesn't exist in the hint option
QUERY PLAN
------------------------------------------------
Nested Loop
- Join Filter: (t1.c1 = t4.c1)
-> Merge Join
Merge Cond: (t1.c1 = t2.c1)
-> Merge Join
Sort Key: t2.c1
-> Seq Scan on t2
-> Index Scan using t4_i1 on t4
- Index Cond: (c1 = t3.c1)
-(13 rows)
+ Index Cond: (c1 = t1.c1)
+(12 rows)
----
---- No. L-1-4 conflict table name
QUERY PLAN
------------------------------------------------------------------------
Nested Loop
- Join Filter: (t1.c1 = t4.c1)
InitPlan 1 (returns $1)
-> Aggregate
-> Nested Loop
- Join Filter: (t1_1.c1 = t4_1.c1)
-> Merge Join
Merge Cond: (t1_1.c1 = t2_1.c1)
-> Merge Join
Sort Key: t2_1.c1
-> Seq Scan on t2 t2_1
-> Index Only Scan using t4_i1 on t4 t4_1
- Index Cond: (c1 = t3_1.c1)
+ Index Cond: (c1 = t1_1.c1)
-> Merge Join
Merge Cond: (t1.c1 = t2.c1)
-> Merge Join
Sort Key: t2.c1
-> Seq Scan on t2
-> Index Scan using t4_i1 on t4
- Index Cond: (c1 = t3.c1)
-(28 rows)
+ Index Cond: (c1 = t1.c1)
+(26 rows)
/*+Leading(t4 t2 t3 t1)*/
EXPLAIN (COSTS false) SELECT *, (SELECT max(t1.c1) FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1) FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
QUERY PLAN
------------------------------------------------
Nested Loop
- Join Filter: (t1.c1 = t4.c1)
-> Merge Join
Merge Cond: (t1.c1 = t2.c1)
-> Merge Join
Sort Key: t2.c1
-> Seq Scan on t2
-> Index Scan using t4_i1 on t4
- Index Cond: (c1 = t3.c1)
-(13 rows)
+ Index Cond: (c1 = t1.c1)
+(12 rows)
/*+Leading(t4 t2 t3 t4)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
QUERY PLAN
------------------------------------------------
Nested Loop
- Join Filter: (t1.c1 = t4.c1)
-> Merge Join
Merge Cond: (t1.c1 = t2.c1)
-> Merge Join
Sort Key: t2.c1
-> Seq Scan on t2
-> Index Scan using t4_i1 on t4
- Index Cond: (c1 = t3.c1)
-(13 rows)
+ Index Cond: (c1 = t1.c1)
+(12 rows)
-- No. L-1-5-3
/*+Leading(t4 t2 t3 t1 t4 t2 t3 t1)*/
QUERY PLAN
------------------------------------------------
Nested Loop
- Join Filter: (t1.c1 = t4.c1)
-> Merge Join
Merge Cond: (t1.c1 = t2.c1)
-> Merge Join
Sort Key: t2.c1
-> Seq Scan on t2
-> Index Scan using t4_i1 on t4
- Index Cond: (c1 = t3.c1)
-(13 rows)
+ Index Cond: (c1 = t1.c1)
+(12 rows)
/*+Leading(t4 t2 t2 t4)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
QUERY PLAN
------------------------------------------------
Nested Loop
- Join Filter: (t1.c1 = t4.c1)
-> Merge Join
Merge Cond: (t1.c1 = t2.c1)
-> Merge Join
Sort Key: t2.c1
-> Seq Scan on t2
-> Index Scan using t4_i1 on t4
- Index Cond: (c1 = t3.c1)
-(13 rows)
+ Index Cond: (c1 = t1.c1)
+(12 rows)
----
---- No. L-1-6 object type for the hint
QUERY PLAN
------------------------------------------------
Nested Loop
- Join Filter: (t1.c1 = t4.c1)
-> Merge Join
Merge Cond: (t1.c1 = t2.c1)
-> Merge Join
Sort Key: t2.c1
-> Seq Scan on t2
-> Index Only Scan using t4_i1 on t4
- Index Cond: (c1 = t3.c1)
-(13 rows)
+ Index Cond: (c1 = t1.c1)
+(12 rows)
/*+Leading(st4 t2 t3 t1)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, (SELECT t4.c1 FROM s1.t4) st4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = st4.c1;
QUERY PLAN
------------------------------------------------
Nested Loop
- Join Filter: (t1.c1 = t4.c1)
-> Merge Join
Merge Cond: (t1.c1 = t2.c1)
-> Merge Join
Sort Key: t2.c1
-> Seq Scan on t2
-> Index Only Scan using t4_i1 on t4
- Index Cond: (c1 = t3.c1)
-(13 rows)
+ Index Cond: (c1 = t1.c1)
+(12 rows)
/*+Leading(t4 t2 t3 t1)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2, s1.t3, (SELECT t4.c1 FROM s1.t4) st4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = st4.c1;
)
FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
;
- QUERY PLAN
--------------------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------------------
Aggregate
InitPlan 1 (returns $0)
-> Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt2.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
-(47 rows)
+ -> Materialize
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
+(50 rows)
/*+
Leading(bmt1 bmt2 bmt3 bmt4)
duplication hint:
error hint:
- QUERY PLAN
--------------------------------------------------------------------
+ QUERY PLAN
+-------------------------------------------------------------------------
Aggregate
InitPlan 1 (returns $0)
-> Aggregate
-> Nested Loop
Join Filter: (b1t2.c1 = b1t1.c1)
+ -> Tid Scan on t1 b1t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t2.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t2.c1 = b1t3.c1)
-> Seq Scan on t2 b1t2
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 b1t1
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t3.c1 = b2t1.c1)
+ -> Tid Scan on t1 b2t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t3.c1 = b2t4.c1)
-> Tid Scan on t3 b2t3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 b2t1
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt2.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
-(47 rows)
+ -> Materialize
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
+(50 rows)
-- No. L-2-1-2
EXPLAIN (COSTS false)
)
FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = bmt3.c1 AND bmt3.ctid = '(1,1)' AND bmt1.c1 = bmt4.c1 AND bmt4.ctid = '(1,1)'
;
- QUERY PLAN
--------------------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------------------
Aggregate
InitPlan 1 (returns $0)
-> Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 3 (returns $2)
-> Aggregate
-> Nested Loop
Join Filter: (b3t1.c1 = b3t4.c1)
+ -> Tid Scan on t4 b3t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t3.c1)
+ -> Tid Scan on t3 b3t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t2.c1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b3t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b3t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b3t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b3t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt2.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
-(63 rows)
+ -> Materialize
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
+(67 rows)
/*+
Leading(bmt1 bmt2 bmt3 bmt4)
duplication hint:
error hint:
- QUERY PLAN
--------------------------------------------------------------------
+ QUERY PLAN
+-------------------------------------------------------------------------
Aggregate
InitPlan 1 (returns $0)
-> Aggregate
-> Nested Loop
Join Filter: (b1t2.c1 = b1t1.c1)
+ -> Tid Scan on t1 b1t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t2.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t2.c1 = b1t3.c1)
-> Seq Scan on t2 b1t2
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 b1t1
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t3.c1 = b2t1.c1)
+ -> Tid Scan on t1 b2t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t3.c1 = b2t4.c1)
-> Tid Scan on t3 b2t3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 b2t1
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
InitPlan 3 (returns $2)
-> Aggregate
-> Nested Loop
Join Filter: (b3t1.c1 = b3t3.c1)
+ -> Tid Scan on t3 b3t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t2.c1)
+ -> Seq Scan on t2 b3t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t4.c1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b3t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b3t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b3t3
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t4 b3t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt2.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
-(63 rows)
+ -> Materialize
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
+(67 rows)
-- No. L-2-1-3
EXPLAIN (COSTS false) SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = bmt2.c1 AND bmt2.ctid = '(1,1)' AND bmt1.c1 = sbmt3.c1 AND sbmt3.ctid = '(1,1)' AND bmt1.c1 = sbmt4.c1 AND sbmt4.ctid = '(1,1)';
- QUERY PLAN
------------------------------------------------------------
+ QUERY PLAN
+---------------------------------------------------------------
Aggregate
-> Nested Loop
Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt2.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
-(15 rows)
+ -> Materialize
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
+(16 rows)
/*+
Leading(bmt4 bmt3 bmt2 bmt1)
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------------
Aggregate
-> Nested Loop
Join Filter: (bmt2.c1 = bmt1.c1)
+ -> Tid Scan on t1 bmt1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt3.c1 = bmt2.c1)
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt3.c1 = bmt4.c1)
-> Tid Scan on t3 bmt3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 bmt1
- TID Cond: (ctid = '(1,1)'::tid)
-(15 rows)
+ -> Materialize
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
+(16 rows)
-- No. L-2-1-4
EXPLAIN (COSTS false) SELECT max(bmt1.c1) FROM s1.t1 bmt1, (SELECT ctid, * FROM s1.t2 bmt2) sbmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.ctid = '(1,1)' AND bmt1.c1 = sbmt2.c1 AND sbmt2.ctid = '(1,1)' AND bmt1.c1 = sbmt3.c1 AND sbmt3.ctid = '(1,1)' AND bmt1.c1 = sbmt4.c1 AND sbmt4.ctid = '(1,1)';
- QUERY PLAN
------------------------------------------------------------
+ QUERY PLAN
+---------------------------------------------------------------
Aggregate
-> Nested Loop
Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt2.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
-(15 rows)
+ -> Materialize
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
+(16 rows)
/*+
Leading(bmt4 bmt3 bmt2 bmt1)
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------------
Aggregate
-> Nested Loop
Join Filter: (bmt2.c1 = bmt1.c1)
+ -> Tid Scan on t1 bmt1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt3.c1 = bmt2.c1)
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt3.c1 = bmt4.c1)
-> Tid Scan on t3 bmt3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 bmt1
- TID Cond: (ctid = '(1,1)'::tid)
-(15 rows)
+ -> Materialize
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
+(16 rows)
-- No. L-2-1-5
EXPLAIN (COSTS false)
SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.ctid = '(1,1)' AND b2t1.c1 = b2t2.c1 AND b2t2.ctid = '(1,1)' AND b2t1.c1 = b2t3.c1 AND b2t3.ctid = '(1,1)' AND b2t1.c1 = b2t4.c1 AND b2t4.ctid = '(1,1)'
)
;
- QUERY PLAN
--------------------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------------------
Aggregate
InitPlan 1 (returns $0)
-> Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt2.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
Filter: ((c1 <> $0) AND (c1 <> $1))
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
-(48 rows)
+ -> Materialize
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
+(51 rows)
/*+
Leading(bmt1 bmt2 bmt3 bmt4)
duplication hint:
error hint:
- QUERY PLAN
--------------------------------------------------------------------
+ QUERY PLAN
+-------------------------------------------------------------------------
Aggregate
InitPlan 1 (returns $0)
-> Aggregate
-> Nested Loop
Join Filter: (b1t2.c1 = b1t1.c1)
+ -> Tid Scan on t1 b1t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t2.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t2.c1 = b1t3.c1)
-> Seq Scan on t2 b1t2
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 b1t1
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t3.c1 = b2t1.c1)
+ -> Tid Scan on t1 b2t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t3.c1 = b2t4.c1)
-> Tid Scan on t3 b2t3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 b2t1
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt2.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
Filter: ((c1 <> $0) AND (c1 <> $1))
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
-(48 rows)
+ -> Materialize
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
+(51 rows)
-- No. L-2-1-6
EXPLAIN (COSTS false)
-> Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 3 (returns $2)
-> Aggregate
-> Nested Loop
Join Filter: (b3t1.c1 = b3t4.c1)
+ -> Tid Scan on t4 b3t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t3.c1)
+ -> Tid Scan on t3 b3t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t2.c1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b3t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b3t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b3t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b3t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt2.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
Filter: ((c1 <> $0) AND (c1 <> $1) AND (c1 <> $2))
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
-(64 rows)
+ -> Materialize
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
+(68 rows)
/*+
Leading(bmt1 bmt2 bmt3 bmt4)
-> Aggregate
-> Nested Loop
Join Filter: (b1t2.c1 = b1t1.c1)
+ -> Tid Scan on t1 b1t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t2.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t2.c1 = b1t3.c1)
-> Seq Scan on t2 b1t2
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 b1t1
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t3.c1 = b2t1.c1)
+ -> Tid Scan on t1 b2t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t3.c1 = b2t4.c1)
-> Tid Scan on t3 b2t3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 b2t1
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
InitPlan 3 (returns $2)
-> Aggregate
-> Nested Loop
Join Filter: (b3t1.c1 = b3t3.c1)
+ -> Tid Scan on t3 b3t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t2.c1)
+ -> Seq Scan on t2 b3t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t4.c1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b3t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b3t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b3t3
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t4 b3t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt2.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
Filter: ((c1 <> $0) AND (c1 <> $1) AND (c1 <> $2))
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
-(64 rows)
+ -> Materialize
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
+(68 rows)
-- No. L-2-1-7
EXPLAIN (COSTS false)
-> Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
CTE c2
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = c2.c1)
-> Nested Loop
- Join Filter: (bmt1.c1 = c1.c1)
+ Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt4.c1)
+ Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt3.c1)
+ Join Filter: (bmt1.c1 = bmt2.c1)
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt2.c1)
+ Join Filter: (bmt1.c1 = c1.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
- -> CTE Scan on c1
+ -> CTE Scan on c1
-> CTE Scan on c2
-(53 rows)
+(55 rows)
/*+
Leading(c2 c1 bmt1 bmt2 bmt3 bmt4)
duplication hint:
error hint:
- QUERY PLAN
--------------------------------------------------------------------
+ QUERY PLAN
+-------------------------------------------------------------------------
Aggregate
CTE c1
-> Aggregate
-> Nested Loop
Join Filter: (b1t2.c1 = b1t1.c1)
+ -> Tid Scan on t1 b1t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t2.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t2.c1 = b1t3.c1)
-> Seq Scan on t2 b1t2
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 b1t1
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
CTE c2
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t3.c1 = b2t1.c1)
+ -> Tid Scan on t1 b2t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t3.c1 = b2t4.c1)
-> Tid Scan on t3 b2t3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 b2t1
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt2.c1)
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (c1.c1 = bmt1.c1)
+ -> Tid Scan on t1 bmt1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (c1.c1 = c2.c1)
-> CTE Scan on c1
-> CTE Scan on c2
- -> Tid Scan on t1 bmt1
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
-(53 rows)
+(55 rows)
-- No. L-2-1-8
EXPLAIN (COSTS false)
-> Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
CTE c2
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
CTE c3
-> Aggregate
-> Nested Loop
Join Filter: (b3t1.c1 = b3t4.c1)
+ -> Tid Scan on t4 b3t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t3.c1)
+ -> Tid Scan on t3 b3t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t2.c1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b3t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b3t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b3t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b3t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = c3.c1)
-> Nested Loop
Join Filter: (bmt1.c1 = c2.c1)
-> Nested Loop
- Join Filter: (bmt1.c1 = c1.c1)
+ Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt4.c1)
+ Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt3.c1)
+ Join Filter: (bmt1.c1 = bmt2.c1)
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt2.c1)
+ Join Filter: (bmt1.c1 = c1.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
- -> CTE Scan on c1
+ -> CTE Scan on c1
-> CTE Scan on c2
-> CTE Scan on c3
-(72 rows)
+(75 rows)
/*+
Leading(c3 c2 c1 bmt1 bmt2 bmt3 bmt4)
duplication hint:
error hint:
- QUERY PLAN
---------------------------------------------------------------------
+ QUERY PLAN
+-------------------------------------------------------------------------
Aggregate
CTE c1
-> Aggregate
-> Nested Loop
Join Filter: (b1t2.c1 = b1t1.c1)
+ -> Tid Scan on t1 b1t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t2.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t2.c1 = b1t3.c1)
-> Seq Scan on t2 b1t2
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 b1t1
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
CTE c2
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t3.c1 = b2t1.c1)
+ -> Tid Scan on t1 b2t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t3.c1 = b2t4.c1)
-> Tid Scan on t3 b2t3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 b2t1
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
CTE c3
-> Aggregate
-> Nested Loop
Join Filter: (b3t1.c1 = b3t3.c1)
+ -> Tid Scan on t3 b3t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t2.c1)
+ -> Seq Scan on t2 b3t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t4.c1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b3t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b3t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b3t3
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t4 b3t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt1.c1 = bmt2.c1)
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (c1.c1 = bmt1.c1)
+ -> Tid Scan on t1 bmt1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (c2.c1 = c1.c1)
-> Nested Loop
-> CTE Scan on c2
-> CTE Scan on c3
-> CTE Scan on c1
- -> Tid Scan on t1 bmt1
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
-(72 rows)
+(75 rows)
----
---- No. L-2-2 the number of the tables per quiry block
SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)'
)
;
- QUERY PLAN
--------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------
Aggregate
CTE c1
-> Aggregate
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 3 (returns $2)
-> Aggregate
-> Nested Loop
Join Filter: (b3t1.c1 = b3t2.c1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b3t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b3t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = c1.c1)
+ Join Filter: (bmt1.c1 = bmt2.c1)
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt2.c1)
+ Join Filter: (bmt1.c1 = c1.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 <> $2)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> CTE Scan on c1
-(35 rows)
+ -> CTE Scan on c1
+(38 rows)
/*+
Leading(c1 bmt2 bmt1)
duplication hint:
error hint:
- QUERY PLAN
--------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------
Aggregate
CTE c1
-> Aggregate
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 3 (returns $2)
-> Aggregate
-> Nested Loop
Join Filter: (b3t1.c1 = b3t2.c1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b3t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b3t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt2.c1 = bmt1.c1)
+ -> Tid Scan on t1 bmt1
+ TID Cond: (ctid = '(1,1)'::tid)
+ Filter: (c1 <> $2)
-> Nested Loop
Join Filter: (bmt2.c1 = c1.c1)
-> Seq Scan on t2 bmt2
Filter: (ctid = '(1,1)'::tid)
-> CTE Scan on c1
- -> Tid Scan on t1 bmt1
- TID Cond: (ctid = '(1,1)'::tid)
- Filter: (c1 <> $2)
-(35 rows)
+(38 rows)
-- No. L-2-2-3
EXPLAIN (COSTS false)
SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)' AND b3t1.c1 = b3t3.c1 AND b3t3.ctid = '(1,1)' AND b3t1.c1 = b3t4.c1 AND b3t4.ctid = '(1,1)'
)
;
- QUERY PLAN
--------------------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------------------
Aggregate
CTE c1
-> Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 3 (returns $2)
-> Aggregate
-> Nested Loop
Join Filter: (b3t1.c1 = b3t4.c1)
+ -> Tid Scan on t4 b3t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t3.c1)
+ -> Tid Scan on t3 b3t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t2.c1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b3t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b3t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b3t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b3t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = c1.c1)
+ Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt4.c1)
+ Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt3.c1)
+ Join Filter: (bmt1.c1 = bmt2.c1)
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt2.c1)
+ Join Filter: (bmt1.c1 = c1.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 <> $2)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
- -> CTE Scan on c1
-(67 rows)
+ -> CTE Scan on c1
+(70 rows)
/*+
Leading(c1 bmt4 bmt3 bmt2 bmt1)
duplication hint:
error hint:
- QUERY PLAN
--------------------------------------------------------------------
+ QUERY PLAN
+-------------------------------------------------------------------------
Aggregate
CTE c1
-> Aggregate
-> Nested Loop
Join Filter: (b1t2.c1 = b1t1.c1)
+ -> Tid Scan on t1 b1t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t3.c1 = b1t2.c1)
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t3.c1 = b1t4.c1)
-> Tid Scan on t3 b1t3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 b1t1
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t2.c1 = b2t1.c1)
+ -> Tid Scan on t1 b2t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t3.c1 = b2t2.c1)
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t3.c1 = b2t4.c1)
-> Tid Scan on t3 b2t3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 b2t1
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
InitPlan 3 (returns $2)
-> Aggregate
-> Nested Loop
Join Filter: (b3t2.c1 = b3t1.c1)
+ -> Tid Scan on t1 b3t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t3.c1 = b3t2.c1)
+ -> Seq Scan on t2 b3t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t3.c1 = b3t4.c1)
-> Tid Scan on t3 b3t3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b3t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b3t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 b3t1
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t4 b3t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt2.c1 = bmt1.c1)
+ -> Tid Scan on t1 bmt1
+ TID Cond: (ctid = '(1,1)'::tid)
+ Filter: (c1 <> $2)
-> Nested Loop
Join Filter: (bmt3.c1 = bmt2.c1)
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt4.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt4.c1 = c1.c1)
-> Tid Scan on t4 bmt4
TID Cond: (ctid = '(1,1)'::tid)
-> CTE Scan on c1
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 bmt1
- TID Cond: (ctid = '(1,1)'::tid)
- Filter: (c1 <> $2)
-(67 rows)
+(70 rows)
-- No. L-2-2-4
EXPLAIN (COSTS false)
SELECT max(b3t1.c1) FROM s1.t1 b3t1 WHERE b3t1.ctid = '(1,1)'
)
;
- QUERY PLAN
--------------------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------------------
Aggregate
CTE c1
-> Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 3 (returns $2)
-> Result
InitPlan 2 (returns $1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = c1.c1)
+ Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt4.c1)
+ Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt3.c1)
+ Join Filter: (bmt1.c1 = bmt2.c1)
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt2.c1)
+ Join Filter: (bmt1.c1 = c1.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 <> $4)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
- -> CTE Scan on c1
-(46 rows)
+ -> CTE Scan on c1
+(47 rows)
/*+
Leading(c1 bmt4 bmt3 bmt2 bmt1)
duplication hint:
error hint:
- QUERY PLAN
--------------------------------------------------------------------
+ QUERY PLAN
+-------------------------------------------------------------------------
Aggregate
CTE c1
-> Aggregate
-> Nested Loop
Join Filter: (b1t2.c1 = b1t1.c1)
+ -> Tid Scan on t1 b1t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t3.c1 = b1t2.c1)
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t3.c1 = b1t4.c1)
-> Tid Scan on t3 b1t3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 b1t1
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
InitPlan 3 (returns $2)
-> Result
InitPlan 2 (returns $1)
TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt2.c1 = bmt1.c1)
+ -> Tid Scan on t1 bmt1
+ TID Cond: (ctid = '(1,1)'::tid)
+ Filter: (c1 <> $4)
-> Nested Loop
Join Filter: (bmt3.c1 = bmt2.c1)
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt4.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (bmt4.c1 = c1.c1)
-> Tid Scan on t4 bmt4
TID Cond: (ctid = '(1,1)'::tid)
-> CTE Scan on c1
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1 bmt1
- TID Cond: (ctid = '(1,1)'::tid)
- Filter: (c1 <> $4)
-(46 rows)
+(47 rows)
----
---- No. L-2-3 RULE or VIEW
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r1
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
(19 rows)
/*+ Leading(t4 t3 t2 t1 r1) */
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------------------
Aggregate
-> Nested Loop
-> Nested Loop
Join Filter: (t2.c1 = t1.c1)
+ -> Tid Scan on t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t3.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t3.c1 = t4.c1)
-> Tid Scan on t3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Tid Scan on r1
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-(19 rows)
+(20 rows)
EXPLAIN (COSTS false) UPDATE s1.r1_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
QUERY PLAN
Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r1_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
(19 rows)
/*+ Leading(b1t1 b1t2 b1t3 b1t4 r1_) */
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------------------------------
+ QUERY PLAN
+---------------------------------------------------------------------
Aggregate
-> Nested Loop
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
-> Tid Scan on r1_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-(19 rows)
+(20 rows)
-- No. L-2-3-2
EXPLAIN (COSTS false) UPDATE s1.r2 SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r2
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r2
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
(39 rows)
/*+ Leading(t4 t3 t2 t1 r2) */
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------------------
Aggregate
-> Nested Loop
-> Nested Loop
Join Filter: (t2.c1 = t1.c1)
+ -> Tid Scan on t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t3.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t3.c1 = t4.c1)
-> Tid Scan on t3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Tid Scan on r2
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Nested Loop
-> Nested Loop
Join Filter: (t2.c1 = t1.c1)
+ -> Tid Scan on t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t3.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t3.c1 = t4.c1)
-> Tid Scan on t3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Tid Scan on r2
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-(39 rows)
+(41 rows)
EXPLAIN (COSTS false) UPDATE s1.r2_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
QUERY PLAN
Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r2_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r2_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
(39 rows)
/*+
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------------------------------
+ QUERY PLAN
+---------------------------------------------------------------------
Aggregate
-> Nested Loop
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
-> Tid Scan on r2_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Nested Loop
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Tid Scan on r2_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-(39 rows)
+(41 rows)
-- No. L-2-3-3
EXPLAIN (COSTS false) UPDATE s1.r3 SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
(59 rows)
/*+ Leading(t4 t3 t2 t1 r3) */
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------------------
Aggregate
-> Nested Loop
-> Nested Loop
Join Filter: (t2.c1 = t1.c1)
+ -> Tid Scan on t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t3.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t3.c1 = t4.c1)
-> Tid Scan on t3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Tid Scan on r3
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Nested Loop
-> Nested Loop
Join Filter: (t2.c1 = t1.c1)
+ -> Tid Scan on t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t3.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t3.c1 = t4.c1)
-> Tid Scan on t3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Tid Scan on r3
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Nested Loop
-> Nested Loop
Join Filter: (t2.c1 = t1.c1)
+ -> Tid Scan on t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t3.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t3.c1 = t4.c1)
-> Tid Scan on t3
TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t1
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Tid Scan on r3
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-(59 rows)
+(62 rows)
EXPLAIN (COSTS false) UPDATE s1.r3_ SET c1 = c1 WHERE c1 = 1 AND ctid = '(1,1)';
QUERY PLAN
Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (b3t1.c1 = b3t4.c1)
+ -> Tid Scan on t4 b3t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t3.c1)
+ -> Tid Scan on t3 b3t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t2.c1)
+ -> Seq Scan on t2 b3t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b3t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b3t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b3t4
- TID Cond: (ctid = '(1,1)'::tid)
(59 rows)
/*+
duplication hint:
error hint:
- QUERY PLAN
------------------------------------------------------------------
+ QUERY PLAN
+---------------------------------------------------------------------
Aggregate
-> Nested Loop
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
-> Tid Scan on r3_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Nested Loop
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Tid Scan on r3_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Nested Loop
-> Nested Loop
Join Filter: (b3t1.c1 = b3t4.c1)
+ -> Tid Scan on t4 b3t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t3.c1)
+ -> Tid Scan on t3 b3t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t2.c1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b3t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b3t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b3t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b3t2
+ Filter: (ctid = '(1,1)'::tid)
-> Tid Scan on r3_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-(59 rows)
+(62 rows)
-- No. L-2-3-4
EXPLAIN (COSTS false) SELECT * FROM s1.v1 v1, s1.v1 v2 WHERE v1.c1 = v2.c1;
QUERY PLAN
------------------------------------------------
Nested Loop
- Join Filter: (t1.c1 = t4.c1)
-> Merge Join
Merge Cond: (t1.c1 = t2.c1)
-> Merge Join
Sort Key: t2.c1
-> Seq Scan on t2
-> Index Scan using t4_i1 on t4
- Index Cond: (c1 = t3.c1)
-(13 rows)
+ Index Cond: (c1 = t1.c1)
+(12 rows)
-- No. L-3-6-2
/*+Leading((t2 t3))*/
QUERY PLAN
------------------------------------------------
Nested Loop
- Join Filter: (t1.c1 = t4.c1)
-> Merge Join
Merge Cond: (t1.c1 = t2.c1)
-> Merge Join
Sort Key: t2.c1
-> Seq Scan on t2
-> Index Scan using t4_i1 on t4
- Index Cond: (c1 = t3.c1)
-(13 rows)
+ Index Cond: (c1 = t1.c1)
+(12 rows)
-- No. L-3-6-4
/*+Leading(((t1 t2) (t3 t4)))*/
QUERY PLAN
---------------------------------------------------------------------------------------
Nested Loop (cost=xxx rows=100 width=xxx)
- Join Filter: (t1.c1 = t4.c1)
-> Merge Join (cost=xxx rows=100 width=xxx)
Merge Cond: (t1.c1 = t2.c1)
-> Merge Join (cost=xxx rows=1000 width=xxx)
Sort Key: t2.c1
-> Seq Scan on t2 (cost=xxx rows=100 width=xxx)
-> Index Scan using t4_i1 on t4 (cost=xxx rows=1 width=xxx)
- Index Cond: (c1 = t3.c1)
-(13 rows)
+ Index Cond: (c1 = t1.c1)
+(12 rows)
----
---- No. R-1-6 object type for the hint
\! sql/maskout.sh results/ut-R.tmpout
QUERY PLAN
------------------------------------------------------------------------------
- Hash Join (cost=xxx rows=360 width=xxx)
+ Hash Join (cost=xxx rows=310 width=xxx)
Hash Cond: (t1.oid = t2.oid)
- -> Seq Scan on t_pg_class t1 (cost=xxx rows=360 width=xxx)
- -> Hash (cost=xxx rows=360 width=xxx)
- -> Seq Scan on t_pg_class t2 (cost=xxx rows=360 width=xxx)
+ -> Seq Scan on t_pg_class t1 (cost=xxx rows=310 width=xxx)
+ -> Hash (cost=xxx rows=310 width=xxx)
+ -> Seq Scan on t_pg_class t2 (cost=xxx rows=310 width=xxx)
(5 rows)
\o results/ut-R.tmpout
------------------------------------------------------------------------------
Hash Join (cost=xxx rows=1 width=xxx)
Hash Cond: (t1.oid = t2.oid)
- -> Seq Scan on t_pg_class t1 (cost=xxx rows=360 width=xxx)
- -> Hash (cost=xxx rows=360 width=xxx)
- -> Seq Scan on t_pg_class t2 (cost=xxx rows=360 width=xxx)
+ -> Seq Scan on t_pg_class t1 (cost=xxx rows=310 width=xxx)
+ -> Hash (cost=xxx rows=310 width=xxx)
+ -> Seq Scan on t_pg_class t2 (cost=xxx rows=310 width=xxx)
(5 rows)
-- No. R-1-6-6
-> Index Only Scan using t2_i1 on t2 b2t2 (cost=xxx rows=1 width=xxx)
Index Cond: (c1 = b2t1.c1)
-> Nested Loop (cost=xxx rows=100 width=xxx)
- Join Filter: (bmt1.c1 = bmt4.c1)
-> Hash Join (cost=xxx rows=100 width=xxx)
Hash Cond: (bmt3.c1 = bmt1.c1)
-> Seq Scan on t3 bmt3 (cost=xxx rows=1130 width=xxx)
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2 (cost=xxx rows=100 width=xxx)
-> Index Only Scan using t4_i1 on t4 bmt4 (cost=xxx rows=1 width=xxx)
- Index Cond: (c1 = bmt3.c1)
-(44 rows)
+ Index Cond: (c1 = bmt1.c1)
+(43 rows)
\o results/ut-R.tmpout
/*+
-> Index Only Scan using t2_i1 on t2 b2t2 (cost=xxx rows=1 width=xxx)
Index Cond: (c1 = b2t1.c1)
-> Nested Loop (cost=xxx rows=1 width=xxx)
- Join Filter: (bmt1.c1 = bmt4.c1)
-> Hash Join (cost=xxx rows=1 width=xxx)
Hash Cond: (bmt3.c1 = bmt1.c1)
-> Seq Scan on t3 bmt3 (cost=xxx rows=1130 width=xxx)
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2 (cost=xxx rows=100 width=xxx)
-> Index Only Scan using t4_i1 on t4 bmt4 (cost=xxx rows=1 width=xxx)
- Index Cond: (c1 = bmt3.c1)
-(44 rows)
+ Index Cond: (c1 = bmt1.c1)
+(43 rows)
-- No. R-2-1-2
\o results/ut-R.tmpout
InitPlan 3 (returns $5)
-> Aggregate (cost=xxx rows=1 width=xxx)
-> Nested Loop (cost=xxx rows=100 width=xxx)
- Join Filter: (b3t1.c1 = b3t3.c1)
-> Hash Join (cost=xxx rows=100 width=xxx)
Hash Cond: (b3t1.c1 = b3t2.c1)
-> Merge Join (cost=xxx rows=1000 width=xxx)
-> Hash (cost=xxx rows=100 width=xxx)
-> Seq Scan on t2 b3t2 (cost=xxx rows=100 width=xxx)
-> Index Only Scan using t3_i1 on t3 b3t3 (cost=xxx rows=1 width=xxx)
- Index Cond: (c1 = b3t4.c1)
+ Index Cond: (c1 = b3t1.c1)
-> Nested Loop (cost=xxx rows=100 width=xxx)
- Join Filter: (bmt1.c1 = bmt4.c1)
-> Hash Join (cost=xxx rows=100 width=xxx)
Hash Cond: (bmt3.c1 = bmt1.c1)
-> Seq Scan on t3 bmt3 (cost=xxx rows=1130 width=xxx)
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2 (cost=xxx rows=100 width=xxx)
-> Index Only Scan using t4_i1 on t4 bmt4 (cost=xxx rows=1 width=xxx)
- Index Cond: (c1 = bmt3.c1)
-(58 rows)
+ Index Cond: (c1 = bmt1.c1)
+(56 rows)
\o results/ut-R.tmpout
/*+
InitPlan 3 (returns $5)
-> Aggregate (cost=xxx rows=1 width=xxx)
-> Nested Loop (cost=xxx rows=1 width=xxx)
- Join Filter: (b3t1.c1 = b3t3.c1)
-> Hash Join (cost=xxx rows=1 width=xxx)
Hash Cond: (b3t1.c1 = b3t2.c1)
-> Merge Join (cost=xxx rows=1 width=xxx)
-> Hash (cost=xxx rows=100 width=xxx)
-> Seq Scan on t2 b3t2 (cost=xxx rows=100 width=xxx)
-> Index Only Scan using t3_i1 on t3 b3t3 (cost=xxx rows=1 width=xxx)
- Index Cond: (c1 = b3t4.c1)
+ Index Cond: (c1 = b3t1.c1)
-> Nested Loop (cost=xxx rows=1 width=xxx)
- Join Filter: (bmt1.c1 = bmt4.c1)
-> Hash Join (cost=xxx rows=1 width=xxx)
Hash Cond: (bmt3.c1 = bmt1.c1)
-> Seq Scan on t3 bmt3 (cost=xxx rows=1130 width=xxx)
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2 (cost=xxx rows=100 width=xxx)
-> Index Only Scan using t4_i1 on t4 bmt4 (cost=xxx rows=1 width=xxx)
- Index Cond: (c1 = bmt3.c1)
-(58 rows)
+ Index Cond: (c1 = bmt1.c1)
+(56 rows)
-- No. R-2-1-3
\o results/ut-R.tmpout
-> Index Only Scan using t2_i1 on t2 b2t2 (cost=xxx rows=1 width=xxx)
Index Cond: (c1 = b2t1.c1)
-> Nested Loop (cost=xxx rows=100 width=xxx)
- Join Filter: (bmt1.c1 = bmt4.c1)
-> Hash Join (cost=xxx rows=100 width=xxx)
Hash Cond: (bmt3.c1 = bmt1.c1)
-> Seq Scan on t3 bmt3 (cost=xxx rows=1130 width=xxx)
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2 (cost=xxx rows=100 width=xxx)
-> Index Only Scan using t4_i1 on t4 bmt4 (cost=xxx rows=1 width=xxx)
- Index Cond: (c1 = bmt3.c1)
-(45 rows)
+ Index Cond: (c1 = bmt1.c1)
+(44 rows)
\o results/ut-R.tmpout
/*+
-> Index Only Scan using t2_i1 on t2 b2t2 (cost=xxx rows=1 width=xxx)
Index Cond: (c1 = b2t1.c1)
-> Nested Loop (cost=xxx rows=1 width=xxx)
- Join Filter: (bmt1.c1 = bmt4.c1)
-> Hash Join (cost=xxx rows=1 width=xxx)
Hash Cond: (bmt3.c1 = bmt1.c1)
-> Seq Scan on t3 bmt3 (cost=xxx rows=1130 width=xxx)
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2 (cost=xxx rows=100 width=xxx)
-> Index Only Scan using t4_i1 on t4 bmt4 (cost=xxx rows=1 width=xxx)
- Index Cond: (c1 = bmt3.c1)
-(45 rows)
+ Index Cond: (c1 = bmt1.c1)
+(44 rows)
-- No. R-2-1-6
\o results/ut-R.tmpout
InitPlan 3 (returns $5)
-> Aggregate (cost=xxx rows=1 width=xxx)
-> Nested Loop (cost=xxx rows=100 width=xxx)
- Join Filter: (b3t1.c1 = b3t3.c1)
-> Hash Join (cost=xxx rows=100 width=xxx)
Hash Cond: (b3t1.c1 = b3t2.c1)
-> Merge Join (cost=xxx rows=1000 width=xxx)
-> Hash (cost=xxx rows=100 width=xxx)
-> Seq Scan on t2 b3t2 (cost=xxx rows=100 width=xxx)
-> Index Only Scan using t3_i1 on t3 b3t3 (cost=xxx rows=1 width=xxx)
- Index Cond: (c1 = b3t4.c1)
+ Index Cond: (c1 = b3t1.c1)
-> Nested Loop (cost=xxx rows=100 width=xxx)
- Join Filter: (bmt1.c1 = bmt4.c1)
-> Hash Join (cost=xxx rows=100 width=xxx)
Hash Cond: (bmt3.c1 = bmt1.c1)
-> Seq Scan on t3 bmt3 (cost=xxx rows=1130 width=xxx)
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2 (cost=xxx rows=100 width=xxx)
-> Index Only Scan using t4_i1 on t4 bmt4 (cost=xxx rows=1 width=xxx)
- Index Cond: (c1 = bmt3.c1)
-(59 rows)
+ Index Cond: (c1 = bmt1.c1)
+(57 rows)
\o results/ut-R.tmpout
/*+
InitPlan 3 (returns $5)
-> Aggregate (cost=xxx rows=1 width=xxx)
-> Nested Loop (cost=xxx rows=1 width=xxx)
- Join Filter: (b3t1.c1 = b3t3.c1)
-> Hash Join (cost=xxx rows=1 width=xxx)
Hash Cond: (b3t1.c1 = b3t2.c1)
-> Merge Join (cost=xxx rows=1 width=xxx)
-> Hash (cost=xxx rows=100 width=xxx)
-> Seq Scan on t2 b3t2 (cost=xxx rows=100 width=xxx)
-> Index Only Scan using t3_i1 on t3 b3t3 (cost=xxx rows=1 width=xxx)
- Index Cond: (c1 = b3t4.c1)
+ Index Cond: (c1 = b3t1.c1)
-> Nested Loop (cost=xxx rows=1 width=xxx)
- Join Filter: (bmt1.c1 = bmt4.c1)
-> Hash Join (cost=xxx rows=1 width=xxx)
Hash Cond: (bmt3.c1 = bmt1.c1)
-> Seq Scan on t3 bmt3 (cost=xxx rows=1130 width=xxx)
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2 (cost=xxx rows=100 width=xxx)
-> Index Only Scan using t4_i1 on t4 bmt4 (cost=xxx rows=1 width=xxx)
- Index Cond: (c1 = bmt3.c1)
-(59 rows)
+ Index Cond: (c1 = bmt1.c1)
+(57 rows)
-- No. R-2-1-7
\o results/ut-R.tmpout
CTE c3
-> Aggregate (cost=xxx rows=1 width=xxx)
-> Nested Loop (cost=xxx rows=100 width=xxx)
- Join Filter: (b3t1.c1 = b3t3.c1)
-> Hash Join (cost=xxx rows=100 width=xxx)
Hash Cond: (b3t1.c1 = b3t2.c1)
-> Merge Join (cost=xxx rows=1000 width=xxx)
-> Hash (cost=xxx rows=100 width=xxx)
-> Seq Scan on t2 b3t2 (cost=xxx rows=100 width=xxx)
-> Index Only Scan using t3_i1 on t3 b3t3 (cost=xxx rows=1 width=xxx)
- Index Cond: (c1 = b3t4.c1)
+ Index Cond: (c1 = b3t1.c1)
-> Nested Loop (cost=xxx rows=1 width=xxx)
- Join Filter: (bmt1.c1 = bmt4.c1)
-> Hash Join (cost=xxx rows=1 width=xxx)
Hash Cond: (bmt3.c1 = bmt1.c1)
-> Seq Scan on t3 bmt3 (cost=xxx rows=1130 width=xxx)
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2 (cost=xxx rows=100 width=xxx)
-> Index Only Scan using t4_i1 on t4 bmt4 (cost=xxx rows=1 width=xxx)
- Index Cond: (c1 = bmt3.c1)
-(74 rows)
+ Index Cond: (c1 = bmt1.c1)
+(72 rows)
\o results/ut-R.tmpout
/*+
CTE c3
-> Aggregate (cost=xxx rows=1 width=xxx)
-> Nested Loop (cost=xxx rows=1 width=xxx)
- Join Filter: (b3t1.c1 = b3t3.c1)
-> Hash Join (cost=xxx rows=1 width=xxx)
Hash Cond: (b3t1.c1 = b3t2.c1)
-> Merge Join (cost=xxx rows=1 width=xxx)
-> Hash (cost=xxx rows=100 width=xxx)
-> Seq Scan on t2 b3t2 (cost=xxx rows=100 width=xxx)
-> Index Only Scan using t3_i1 on t3 b3t3 (cost=xxx rows=1 width=xxx)
- Index Cond: (c1 = b3t4.c1)
+ Index Cond: (c1 = b3t1.c1)
-> Nested Loop (cost=xxx rows=1 width=xxx)
- Join Filter: (bmt1.c1 = bmt4.c1)
-> Hash Join (cost=xxx rows=1 width=xxx)
Hash Cond: (bmt3.c1 = bmt1.c1)
-> Seq Scan on t3 bmt3 (cost=xxx rows=1130 width=xxx)
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2 (cost=xxx rows=100 width=xxx)
-> Index Only Scan using t4_i1 on t4 bmt4 (cost=xxx rows=1 width=xxx)
- Index Cond: (c1 = bmt3.c1)
-(74 rows)
+ Index Cond: (c1 = bmt1.c1)
+(72 rows)
----
---- No. R-2-2 the number of the tables per quiry block
Aggregate (cost=xxx rows=1 width=xxx)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (t1.c1 = t3.c1)
-> Merge Join (cost=xxx rows=1 width=xxx)
Sort Key: t2.c1
-> Seq Scan on t2 (cost=xxx rows=1 width=xxx)
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
-(20 rows)
+ -> Materialize (cost=xxx rows=1 width=xxx)
+ -> Tid Scan on t3 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
+(21 rows)
\o results/ut-R.tmpout
/*+
Aggregate (cost=xxx rows=1 width=xxx)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (b1t1.c1 = b1t3.c1)
-> Merge Join (cost=xxx rows=1 width=xxx)
Sort Key: b1t2.c1
-> Seq Scan on t2 b1t2 (cost=xxx rows=1 width=xxx)
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
-(20 rows)
+ -> Materialize (cost=xxx rows=1 width=xxx)
+ -> Tid Scan on t3 b1t3 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
+(21 rows)
\o results/ut-R.tmpout
/*+
Aggregate (cost=xxx rows=1 width=xxx)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (t1.c1 = t3.c1)
-> Merge Join (cost=xxx rows=1 width=xxx)
Sort Key: t2.c1
-> Seq Scan on t2 (cost=xxx rows=1 width=xxx)
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize (cost=xxx rows=1 width=xxx)
+ -> Tid Scan on t3 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
Aggregate (cost=xxx rows=1 width=xxx)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (t1.c1 = t3.c1)
-> Merge Join (cost=xxx rows=1 width=xxx)
Sort Key: t2.c1
-> Seq Scan on t2 (cost=xxx rows=1 width=xxx)
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
-(41 rows)
+ -> Materialize (cost=xxx rows=1 width=xxx)
+ -> Tid Scan on t3 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
+(43 rows)
\o results/ut-R.tmpout
/*+
Aggregate (cost=xxx rows=1 width=xxx)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (b1t1.c1 = b1t3.c1)
-> Merge Join (cost=xxx rows=1 width=xxx)
Sort Key: b1t2.c1
-> Seq Scan on t2 b1t2 (cost=xxx rows=1 width=xxx)
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize (cost=xxx rows=1 width=xxx)
+ -> Tid Scan on t3 b1t3 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
Aggregate (cost=xxx rows=1 width=xxx)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (b2t1.c1 = b2t3.c1)
-> Merge Join (cost=xxx rows=1 width=xxx)
Sort Key: b2t2.c1
-> Seq Scan on t2 b2t2 (cost=xxx rows=1 width=xxx)
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
-(41 rows)
+ -> Materialize (cost=xxx rows=1 width=xxx)
+ -> Tid Scan on t3 b2t3 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
+(43 rows)
\o results/ut-R.tmpout
/*+
Aggregate (cost=xxx rows=1 width=xxx)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (t1.c1 = t3.c1)
-> Merge Join (cost=xxx rows=1 width=xxx)
Sort Key: t2.c1
-> Seq Scan on t2 (cost=xxx rows=1 width=xxx)
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize (cost=xxx rows=1 width=xxx)
+ -> Tid Scan on t3 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
Aggregate (cost=xxx rows=1 width=xxx)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (t1.c1 = t3.c1)
-> Merge Join (cost=xxx rows=1 width=xxx)
Sort Key: t2.c1
-> Seq Scan on t2 (cost=xxx rows=1 width=xxx)
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize (cost=xxx rows=1 width=xxx)
+ -> Tid Scan on t3 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
Aggregate (cost=xxx rows=1 width=xxx)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (t1.c1 = t3.c1)
-> Merge Join (cost=xxx rows=1 width=xxx)
Sort Key: t2.c1
-> Seq Scan on t2 (cost=xxx rows=1 width=xxx)
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
-(62 rows)
+ -> Materialize (cost=xxx rows=1 width=xxx)
+ -> Tid Scan on t3 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
+(65 rows)
\o results/ut-R.tmpout
/*+
Aggregate (cost=xxx rows=1 width=xxx)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (b1t1.c1 = b1t3.c1)
-> Merge Join (cost=xxx rows=1 width=xxx)
Sort Key: b1t2.c1
-> Seq Scan on t2 b1t2 (cost=xxx rows=1 width=xxx)
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize (cost=xxx rows=1 width=xxx)
+ -> Tid Scan on t3 b1t3 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
Aggregate (cost=xxx rows=1 width=xxx)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (b2t1.c1 = b2t3.c1)
-> Merge Join (cost=xxx rows=1 width=xxx)
Sort Key: b2t2.c1
-> Seq Scan on t2 b2t2 (cost=xxx rows=1 width=xxx)
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize (cost=xxx rows=1 width=xxx)
+ -> Tid Scan on t3 b2t3 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
Aggregate (cost=xxx rows=1 width=xxx)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (b3t1.c1 = b3t4.c1)
+ -> Tid Scan on t4 b3t4 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop (cost=xxx rows=1 width=xxx)
Join Filter: (b3t1.c1 = b3t3.c1)
-> Merge Join (cost=xxx rows=1 width=xxx)
Sort Key: b3t2.c1
-> Seq Scan on t2 b3t2 (cost=xxx rows=1 width=xxx)
Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b3t3 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b3t4 (cost=xxx rows=1 width=xxx)
- TID Cond: (ctid = '(1,1)'::tid)
-(62 rows)
+ -> Materialize (cost=xxx rows=1 width=xxx)
+ -> Tid Scan on t3 b3t3 (cost=xxx rows=1 width=xxx)
+ TID Cond: (ctid = '(1,1)'::tid)
+(65 rows)
\o results/ut-R.tmpout
/*+
------------------------------------------------------------------------------------------------------
Aggregate (cost=xxx rows=1 width=xxx)
-> Nested Loop (cost=xxx rows=100 width=xxx)
- Join Filter: (bmt1.c1 = bmt4.c1)
-> Merge Join (cost=xxx rows=100 width=xxx)
Merge Cond: (bmt1.c1 = bmt2.c1)
-> Merge Join (cost=xxx rows=1000 width=xxx)
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2 (cost=xxx rows=100 width=xxx)
-> Index Only Scan using t4_i1 on t4 bmt4 (cost=xxx rows=1 width=xxx)
- Index Cond: (c1 = bmt3.c1)
-(14 rows)
+ Index Cond: (c1 = bmt1.c1)
+(13 rows)
\o results/ut-R.tmpout
/*+
QUERY PLAN
------------------------------------------------------------------------------------------------
Nested Loop (cost=xxx rows=100 width=xxx)
- Join Filter: (bmt1.c1 = bmt4.c1)
-> Merge Join (cost=xxx rows=100 width=xxx)
Merge Cond: (bmt1.c1 = bmt2.c1)
-> Merge Join (cost=xxx rows=1000 width=xxx)
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2 (cost=xxx rows=100 width=xxx)
-> Index Only Scan using t4_i1 on t4 bmt4 (cost=xxx rows=1 width=xxx)
- Index Cond: (c1 = bmt3.c1)
-(13 rows)
+ Index Cond: (c1 = bmt1.c1)
+(12 rows)
\o results/ut-R.tmpout
/*+
QUERY PLAN
------------------------------------------------------------------------------------------------
Nested Loop (cost=xxx rows=100 width=xxx)
- Join Filter: (bmt1.c1 = bmt4.c1)
-> Merge Join (cost=xxx rows=100 width=xxx)
Merge Cond: (bmt1.c1 = bmt2.c1)
-> Merge Join (cost=xxx rows=1000 width=xxx)
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2 (cost=xxx rows=100 width=xxx)
-> Index Only Scan using t4_i1 on t4 bmt4 (cost=xxx rows=1 width=xxx)
- Index Cond: (c1 = bmt3.c1)
-(13 rows)
+ Index Cond: (c1 = bmt1.c1)
+(12 rows)
\o results/ut-R.tmpout
/*+
InitPlan 1 (returns $1)
-> Aggregate
-> Nested Loop
- Join Filter: (b1t1.c1 = b1t4.c1)
-> Merge Join
Merge Cond: (b1t1.c1 = b1t2.c1)
-> Merge Join
Sort Key: b1t2.c1
-> Seq Scan on t2 b1t2
-> Index Only Scan using t4_i1 on t4 b1t4
- Index Cond: (c1 = b1t3.c1)
+ Index Cond: (c1 = b1t1.c1)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt4.c1)
-> Merge Join
Merge Cond: (bmt1.c1 = bmt2.c1)
-> Merge Join
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2
-> Index Only Scan using t4_i1 on t4 bmt4
- Index Cond: (c1 = bmt3.c1)
-(29 rows)
+ Index Cond: (c1 = bmt1.c1)
+(27 rows)
/*+SeqScan(bmt1)IndexScan(bmt2 t2_pkey)BitmapScan(bmt3 t3_pkey)TidScan(bmt4)
TidScan(b1t1)SeqScan(b1t2)IndexScan(b1t3 t3_pkey)BitmapScan(b1t4 t4_pkey)
InitPlan 1 (returns $1)
-> Aggregate
-> Nested Loop
- Join Filter: (b1t1.c1 = b1t4.c1)
-> Merge Join
Merge Cond: (b1t1.c1 = b1t2.c1)
-> Merge Join
Sort Key: b1t2.c1
-> Seq Scan on t2 b1t2
-> Index Only Scan using t4_i1 on t4 b1t4
- Index Cond: (c1 = b1t3.c1)
+ Index Cond: (c1 = b1t1.c1)
InitPlan 2 (returns $3)
-> Aggregate
-> Nested Loop
- Join Filter: (b2t1.c1 = b2t4.c1)
-> Merge Join
Merge Cond: (b2t1.c1 = b2t2.c1)
-> Merge Join
Sort Key: b2t2.c1
-> Seq Scan on t2 b2t2
-> Index Only Scan using t4_i1 on t4 b2t4
- Index Cond: (c1 = b2t3.c1)
+ Index Cond: (c1 = b2t1.c1)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt4.c1)
-> Merge Join
Merge Cond: (bmt1.c1 = bmt2.c1)
-> Merge Join
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2
-> Index Only Scan using t4_i1 on t4 bmt4
- Index Cond: (c1 = bmt3.c1)
-(44 rows)
+ Index Cond: (c1 = bmt1.c1)
+(41 rows)
/*+SeqScan(bmt1)IndexScan(bmt2 t2_pkey)BitmapScan(bmt3 t3_pkey)TidScan(bmt4)
TidScan(b1t1)SeqScan(b1t2)IndexScan(b1t3 t3_pkey)BitmapScan(b1t4 t4_pkey)
----------------------------------------------------------------
Aggregate
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt4.c1)
-> Merge Join
Merge Cond: (bmt1.c1 = bmt2.c1)
-> Merge Join
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2
-> Index Only Scan using t4_i1 on t4 bmt4
- Index Cond: (c1 = bmt3.c1)
-(14 rows)
+ Index Cond: (c1 = bmt1.c1)
+(13 rows)
/*+SeqScan(bmt1)IndexScan(bmt2 t2_pkey)BitmapScan(bmt3 t3_pkey)TidScan(bmt4)
*/
----------------------------------------------------------------
Aggregate
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt4.c1)
-> Merge Join
Merge Cond: (bmt1.c1 = bmt2.c1)
-> Merge Join
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2
-> Index Only Scan using t4_i1 on t4 bmt4
- Index Cond: (c1 = bmt3.c1)
-(14 rows)
+ Index Cond: (c1 = bmt1.c1)
+(13 rows)
/*+SeqScan(bmt1)IndexScan(bmt2 t2_pkey)BitmapScan(bmt3 t3_pkey)TidScan(bmt4)
*/
InitPlan 1 (returns $1)
-> Aggregate
-> Nested Loop
- Join Filter: (b1t1.c1 = b1t4.c1)
-> Merge Join
Merge Cond: (b1t1.c1 = b1t2.c1)
-> Merge Join
Sort Key: b1t2.c1
-> Seq Scan on t2 b1t2
-> Index Only Scan using t4_i1 on t4 b1t4
- Index Cond: (c1 = b1t3.c1)
+ Index Cond: (c1 = b1t1.c1)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt4.c1)
-> Merge Join
Merge Cond: (bmt1.c1 = bmt2.c1)
-> Merge Join
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2
-> Index Only Scan using t4_i1 on t4 bmt4
- Index Cond: (c1 = bmt3.c1)
-(30 rows)
+ Index Cond: (c1 = bmt1.c1)
+(28 rows)
/*+SeqScan(bmt1)IndexScan(bmt2 t2_pkey)BitmapScan(bmt3 t3_pkey)TidScan(bmt4)
TidScan(b1t1)SeqScan(b1t2)IndexScan(b1t3 t3_pkey)BitmapScan(b1t4 t4_pkey)
InitPlan 1 (returns $1)
-> Aggregate
-> Nested Loop
- Join Filter: (b1t1.c1 = b1t4.c1)
-> Merge Join
Merge Cond: (b1t1.c1 = b1t2.c1)
-> Merge Join
Sort Key: b1t2.c1
-> Seq Scan on t2 b1t2
-> Index Only Scan using t4_i1 on t4 b1t4
- Index Cond: (c1 = b1t3.c1)
+ Index Cond: (c1 = b1t1.c1)
InitPlan 2 (returns $3)
-> Aggregate
-> Nested Loop
- Join Filter: (b2t1.c1 = b2t4.c1)
-> Merge Join
Merge Cond: (b2t1.c1 = b2t2.c1)
-> Merge Join
Sort Key: b2t2.c1
-> Seq Scan on t2 b2t2
-> Index Only Scan using t4_i1 on t4 b2t4
- Index Cond: (c1 = b2t3.c1)
+ Index Cond: (c1 = b2t1.c1)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt4.c1)
-> Merge Join
Merge Cond: (bmt1.c1 = bmt2.c1)
-> Merge Join
Sort Key: bmt2.c1
-> Seq Scan on t2 bmt2
-> Index Only Scan using t4_i1 on t4 bmt4
- Index Cond: (c1 = bmt3.c1)
-(45 rows)
+ Index Cond: (c1 = bmt1.c1)
+(42 rows)
/*+SeqScan(bmt1)IndexScan(bmt2 t2_pkey)BitmapScan(bmt3 t3_pkey)TidScan(bmt4)
TidScan(b1t1)SeqScan(b1t2)IndexScan(b1t3 t3_pkey)BitmapScan(b1t4 t4_pkey)
CTE c1
-> Aggregate
-> Nested Loop
- Join Filter: (b1t1.c1 = b1t4.c1)
-> Merge Join
Merge Cond: (b1t1.c1 = b1t2.c1)
-> Merge Join
Sort Key: b1t2.c1
-> Seq Scan on t2 b1t2
-> Index Only Scan using t4_i1 on t4 b1t4
- Index Cond: (c1 = b1t3.c1)
+ Index Cond: (c1 = b1t1.c1)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt4.c1)
-> Nested Loop
- Join Filter: (bmt2.c1 = bmt1.c1)
-> Nested Loop
-> Hash Join
Hash Cond: (bmt2.c1 = c1.c1)
-> Seq Scan on t2 bmt2
-> Hash
-> CTE Scan on c1
- -> Index Only Scan using t3_i1 on t3 bmt3
+ -> Index Only Scan using t1_i1 on t1 bmt1
Index Cond: (c1 = bmt2.c1)
- -> Index Only Scan using t1_i1 on t1 bmt1
- Index Cond: (c1 = bmt3.c1)
+ -> Index Only Scan using t3_i1 on t3 bmt3
+ Index Cond: (c1 = bmt1.c1)
-> Index Only Scan using t4_i1 on t4 bmt4
- Index Cond: (c1 = bmt3.c1)
-(32 rows)
+ Index Cond: (c1 = bmt1.c1)
+(29 rows)
/*+SeqScan(bmt1)IndexScan(bmt2 t2_pkey)BitmapScan(bmt3 t3_pkey)TidScan(bmt4)
TidScan(b1t1)SeqScan(b1t2)IndexScan(b1t3 t3_pkey)BitmapScan(b1t4 t4_pkey)
CTE c1
-> Aggregate
-> Nested Loop
- Join Filter: (b1t1.c1 = b1t4.c1)
-> Merge Join
Merge Cond: (b1t1.c1 = b1t2.c1)
-> Merge Join
Sort Key: b1t2.c1
-> Seq Scan on t2 b1t2
-> Index Only Scan using t4_i1 on t4 b1t4
- Index Cond: (c1 = b1t3.c1)
+ Index Cond: (c1 = b1t1.c1)
CTE c2
-> Aggregate
-> Nested Loop
- Join Filter: (b2t1.c1 = b2t4.c1)
-> Merge Join
Merge Cond: (b2t1.c1 = b2t2.c1)
-> Merge Join
Sort Key: b2t2.c1
-> Seq Scan on t2 b2t2
-> Index Only Scan using t4_i1 on t4 b2t4
- Index Cond: (c1 = b2t3.c1)
+ Index Cond: (c1 = b2t1.c1)
-> Nested Loop
Join Filter: (bmt1.c1 = c2.c1)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt4.c1)
-> Nested Loop
- Join Filter: (bmt2.c1 = bmt1.c1)
-> Nested Loop
-> Hash Join
Hash Cond: (bmt2.c1 = c1.c1)
-> Seq Scan on t2 bmt2
-> Hash
-> CTE Scan on c1
- -> Index Only Scan using t3_i1 on t3 bmt3
+ -> Index Only Scan using t1_i1 on t1 bmt1
Index Cond: (c1 = bmt2.c1)
- -> Index Only Scan using t1_i1 on t1 bmt1
- Index Cond: (c1 = bmt3.c1)
+ -> Index Only Scan using t3_i1 on t3 bmt3
+ Index Cond: (c1 = bmt1.c1)
-> Index Only Scan using t4_i1 on t4 bmt4
- Index Cond: (c1 = bmt3.c1)
+ Index Cond: (c1 = bmt1.c1)
-> CTE Scan on c2
-(50 rows)
+(46 rows)
/*+SeqScan(bmt1)IndexScan(bmt2 t2_pkey)BitmapScan(bmt3 t3_pkey)TidScan(bmt4)
TidScan(b1t1)SeqScan(b1t2)IndexScan(b1t3 t3_pkey)BitmapScan(b1t4 t4_pkey)
SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)'
)
;
- QUERY PLAN
--------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------
Aggregate
CTE c1
-> Aggregate
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 3 (returns $2)
-> Aggregate
-> Nested Loop
Join Filter: (b3t1.c1 = b3t2.c1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b3t2
- Filter: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b3t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
+ Join Filter: (bmt1.c1 = bmt2.c1)
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt2.c1)
+ -> CTE Scan on c1
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 <> $2)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> CTE Scan on c1
-(34 rows)
+(37 rows)
/*+SeqScan(bmt1)IndexScan(bmt2 t2_pkey)
TidScan(b1t1)SeqScan(b1t2)
Index Cond: (c1 = b3t1.c1)
-> Nested Loop
-> Nested Loop
- -> Seq Scan on t1 bmt1
- Filter: ((c1 <> $4) AND (ctid = '(1,1)'::tid))
+ Join Filter: (bmt1.c1 = bmt2.c1)
-> Index Scan using t2_pkey on t2 bmt2
- Index Cond: (c1 = bmt1.c1)
Filter: (ctid = '(1,1)'::tid)
+ -> Seq Scan on t1 bmt1
+ Filter: ((c1 <> $4) AND (ctid = '(1,1)'::tid))
-> CTE Scan on c1
(37 rows)
SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.ctid = '(1,1)' AND b3t1.c1 = b3t2.c1 AND b3t2.ctid = '(1,1)' AND b3t1.c1 = b3t3.c1 AND b3t3.ctid = '(1,1)' AND b3t1.c1 = b3t4.c1 AND b3t4.ctid = '(1,1)'
)
;
- QUERY PLAN
--------------------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------------------
Aggregate
CTE c1
-> Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 2 (returns $1)
-> Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 3 (returns $2)
-> Aggregate
-> Nested Loop
Join Filter: (b3t1.c1 = b3t4.c1)
+ -> Tid Scan on t4 b3t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t3.c1)
+ -> Tid Scan on t3 b3t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t2.c1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b3t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b3t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b3t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b3t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = c1.c1)
+ Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt4.c1)
+ Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt3.c1)
+ Join Filter: (bmt1.c1 = bmt2.c1)
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt2.c1)
+ Join Filter: (bmt1.c1 = c1.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 <> $2)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
- -> CTE Scan on c1
-(67 rows)
+ -> CTE Scan on c1
+(70 rows)
/*+SeqScan(bmt1)IndexScan(bmt2 t2_pkey)BitmapScan(bmt3 t3_pkey)TidScan(bmt4)
TidScan(b1t1)SeqScan(b1t2)IndexScan(b1t3 t3_pkey)BitmapScan(b1t4 t4_pkey)
Join Filter: (bmt1.c1 = bmt4.c1)
-> Nested Loop
-> Nested Loop
- -> Seq Scan on t1 bmt1
- Filter: ((c1 <> $7) AND (ctid = '(1,1)'::tid))
+ Join Filter: (bmt1.c1 = bmt2.c1)
-> Index Scan using t2_pkey on t2 bmt2
- Index Cond: (c1 = bmt1.c1)
Filter: (ctid = '(1,1)'::tid)
+ -> Seq Scan on t1 bmt1
+ Filter: ((c1 <> $7) AND (ctid = '(1,1)'::tid))
-> Bitmap Heap Scan on t3 bmt3
Recheck Cond: (c1 = bmt1.c1)
Filter: (ctid = '(1,1)'::tid)
SELECT max(b3t1.c1) FROM s1.t1 b3t1 WHERE b3t1.ctid = '(1,1)'
)
;
- QUERY PLAN
--------------------------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------------------------
Aggregate
CTE c1
-> Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Materialize
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
InitPlan 3 (returns $2)
-> Result
InitPlan 2 (returns $1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = c1.c1)
+ Join Filter: (bmt1.c1 = bmt4.c1)
+ -> Tid Scan on t4 bmt4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt4.c1)
+ Join Filter: (bmt1.c1 = bmt3.c1)
+ -> Tid Scan on t3 bmt3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt3.c1)
+ Join Filter: (bmt1.c1 = bmt2.c1)
+ -> Seq Scan on t2 bmt2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
- Join Filter: (bmt1.c1 = bmt2.c1)
+ Join Filter: (bmt1.c1 = c1.c1)
-> Tid Scan on t1 bmt1
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 <> $4)
- -> Seq Scan on t2 bmt2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 bmt3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 bmt4
- TID Cond: (ctid = '(1,1)'::tid)
- -> CTE Scan on c1
-(46 rows)
+ -> CTE Scan on c1
+(47 rows)
/*+SeqScan(bmt1)IndexScan(bmt2 t2_pkey)BitmapScan(bmt3 t3_pkey)TidScan(bmt4)
TidScan(b1t1)SeqScan(b1t2)IndexScan(b1t3 t3_pkey)BitmapScan(b1t4 t4_pkey)
Join Filter: (bmt1.c1 = bmt4.c1)
-> Nested Loop
-> Nested Loop
- -> Seq Scan on t1 bmt1
- Filter: ((c1 <> $5) AND (ctid = '(1,1)'::tid))
+ Join Filter: (bmt1.c1 = bmt2.c1)
-> Index Scan using t2_pkey on t2 bmt2
- Index Cond: (c1 = bmt1.c1)
Filter: (ctid = '(1,1)'::tid)
+ -> Seq Scan on t1 bmt1
+ Filter: ((c1 <> $5) AND (ctid = '(1,1)'::tid))
-> Bitmap Heap Scan on t3 bmt3
Recheck Cond: (c1 = bmt1.c1)
Filter: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r1
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
(19 rows)
/*+TidScan(t1)SeqScan(t2)IndexScan(t3 t3_pkey)BitmapScan(t4 t4_pkey)
Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r1_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
(19 rows)
/*+TidScan(b1t1)SeqScan(b1t2)IndexScan(b1t3 t3_pkey)BitmapScan(b1t4 t4_pkey)
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r2
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r2
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
(39 rows)
/*+TidScan(t1)SeqScan(t2)IndexScan(t3 t3_pkey)BitmapScan(t4 t4_pkey)
Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r2_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r2_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
(39 rows)
/*+TidScan(b1t1)SeqScan(b1t2)IndexScan(b1t3 t3_pkey)BitmapScan(b1t4 t4_pkey)
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (t1.c1 = t4.c1)
+ -> Tid Scan on t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t3.c1)
+ -> Tid Scan on t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (t1.c1 = t2.c1)
+ -> Seq Scan on t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4
- TID Cond: (ctid = '(1,1)'::tid)
(59 rows)
/*+TidScan(t1)SeqScan(t2)IndexScan(t3 t3_pkey)BitmapScan(t4 t4_pkey)
Aggregate
-> Nested Loop
Join Filter: (b1t1.c1 = b1t4.c1)
+ -> Tid Scan on t4 b1t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t3.c1)
+ -> Tid Scan on t3 b1t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b1t1.c1 = b1t2.c1)
+ -> Seq Scan on t2 b1t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b1t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b1t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b1t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b1t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (b2t1.c1 = b2t4.c1)
+ -> Tid Scan on t4 b2t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t3.c1)
+ -> Tid Scan on t3 b2t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b2t1.c1 = b2t2.c1)
+ -> Seq Scan on t2 b2t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b2t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b2t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b2t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b2t4
- TID Cond: (ctid = '(1,1)'::tid)
Aggregate
-> Nested Loop
Join Filter: (b3t1.c1 = b3t4.c1)
+ -> Tid Scan on t4 b3t4
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t3.c1)
+ -> Tid Scan on t3 b3t3
+ TID Cond: (ctid = '(1,1)'::tid)
-> Nested Loop
Join Filter: (b3t1.c1 = b3t2.c1)
+ -> Seq Scan on t2 b3t2
+ Filter: (ctid = '(1,1)'::tid)
-> Nested Loop
-> Tid Scan on r3_
TID Cond: (ctid = '(1,1)'::tid)
Filter: (c1 = 1)
-> Tid Scan on t1 b3t1
TID Cond: (ctid = '(1,1)'::tid)
- -> Seq Scan on t2 b3t2
- Filter: (ctid = '(1,1)'::tid)
- -> Tid Scan on t3 b3t3
- TID Cond: (ctid = '(1,1)'::tid)
- -> Tid Scan on t4 b3t4
- TID Cond: (ctid = '(1,1)'::tid)
(59 rows)
/*+TidScan(b1t1)SeqScan(b1t2)IndexScan(b1t3 t3_pkey)BitmapScan(b1t4 t4_pkey)
---- No. S-3-4 index type
----
\d s1.ti1
- Table "s1.ti1"
- Column | Type | Modifiers
---------+---------+-----------
- c1 | integer | not null
- c2 | integer |
- c3 | integer |
- c4 | text |
+ Table "s1.ti1"
+ Column | Type | Collation | Nullable | Default
+--------+---------+-----------+----------+---------
+ c1 | integer | | not null |
+ c2 | integer | | |
+ c3 | integer | | |
+ c4 | text | | |
Indexes:
"ti1_pkey" PRIMARY KEY, btree (c1)
"ti1_c2_key" UNIQUE CONSTRAINT, btree (c2)
---- No. S-3-6 query structure
----
EXPLAIN (COSTS false) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1 AND t1.ctid = '(1,1)';
- QUERY PLAN
------------------------------------------------
+ QUERY PLAN
+-----------------------------------------
Hash Join
- Hash Cond: (t2.c1 = t1.c1)
- -> Seq Scan on t2
+ Hash Cond: (t1.c1 = t2.c1)
+ -> Tid Scan on t1
+ TID Cond: (ctid = '(1,1)'::tid)
-> Hash
- -> Tid Scan on t1
- TID Cond: (ctid = '(1,1)'::tid)
+ -> Seq Scan on t2
(6 rows)
-- No. S-3-6-1
SET parallel_setup_cost to 0;
SET parallel_tuple_cost to 0;
-SET min_parallel_relation_size to 0;
+SET min_parallel_table_scan_size to 0;
+SET min_parallel_index_scan_size to 0;
SET max_parallel_workers_per_gather to DEFAULT;
/*+Parallel(t1 8)*/
EXPLAIN (COSTS false) SELECT * FROM s1.t1;
-- Queries on inheritance tables
SET parallel_setup_cost to 0;
SET parallel_tuple_cost to 0;
-SET min_parallel_relation_size to 0;
+SET min_parallel_table_scan_size to 0;
+SET min_parallel_index_scan_size to 0;
/*+Parallel(p1 8)*/
EXPLAIN (COSTS false) SELECT * FROM p1;
LOG: pg_hint_plan:
SET parallel_setup_cost to DEFAULT;
SET parallel_tuple_cost to DEFAULT;
-SET min_parallel_relation_size to DEFAULT;
+SET min_parallel_table_scan_size to DEFAULT;
+SET min_parallel_index_scan_size to DEFAULT;
/*+Parallel(p1 8 hard)*/
EXPLAIN (COSTS false) SELECT * FROM p1;
LOG: pg_hint_plan:
SET parallel_setup_cost to 0;
SET parallel_tuple_cost to 0;
-SET min_parallel_relation_size to 0;
+SET min_parallel_table_scan_size to 0;
+SET min_parallel_index_scan_size to 0;
/*+Parallel(p1_c1_c1 8 soft) Parallel(p2_c1_c1 0)*/
EXPLAIN (COSTS false) SELECT * FROM p1_c1_c1 join p2_c1_c1 on p1_c1_c1.id = p2_c1_c1.id;
LOG: pg_hint_plan:
-- Joins on inheritance tables
SET parallel_setup_cost to 0;
SET parallel_tuple_cost to 0;
-SET min_parallel_relation_size to 0;
+SET min_parallel_table_scan_size to 0;
+SET min_parallel_index_scan_size to 0;
/*+Parallel(p1 8)*/
EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
LOG: pg_hint_plan:
duplication hint:
error hint:
- QUERY PLAN
--------------------------------------------------------
- Hash Join
- Hash Cond: (p1.id = p2.id)
- -> Gather
- Workers Planned: 1
+ QUERY PLAN
+-------------------------------------------------
+ Gather
+ Workers Planned: 1
+ -> Hash Join
+ Hash Cond: (p1.id = p2.id)
-> Append
-> Parallel Seq Scan on p1
-> Parallel Seq Scan on p1_c1
-> Parallel Seq Scan on p1_c1_c2
-> Parallel Seq Scan on p1_c3_c1
-> Parallel Seq Scan on p1_c3_c2
- -> Hash
- -> Gather
- Workers Planned: 1
+ -> Hash
-> Append
- -> Parallel Seq Scan on p2
- -> Parallel Seq Scan on p2_c1
- -> Parallel Seq Scan on p2_c2
- -> Parallel Seq Scan on p2_c3
- -> Parallel Seq Scan on p2_c4
- -> Parallel Seq Scan on p2_c1_c1
- -> Parallel Seq Scan on p2_c1_c2
- -> Parallel Seq Scan on p2_c3_c1
- -> Parallel Seq Scan on p2_c3_c2
-(27 rows)
+ -> Seq Scan on p2
+ -> Seq Scan on p2_c1
+ -> Seq Scan on p2_c2
+ -> Seq Scan on p2_c3
+ -> Seq Scan on p2_c4
+ -> Seq Scan on p2_c1_c1
+ -> Seq Scan on p2_c1_c2
+ -> Seq Scan on p2_c3_c1
+ -> Seq Scan on p2_c3_c2
+(25 rows)
/*+Parallel(p1 8)Parallel(p2 0)*/
EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
SET parallel_setup_cost to DEFAULT;
SET parallel_tuple_cost to DEFAULT;
-SET min_parallel_relation_size to DEFAULT;
+SET min_parallel_table_scan_size to DEFAULT;
+SET min_parallel_index_scan_size to DEFAULT;
/*+Parallel(p2 8 soft)*/
EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
LOG: pg_hint_plan:
-> Seq Scan on p2_c3_c2
(25 rows)
--- we don't have parallel over index scans so far
+-- Index partial scan is not handled yet.
/*+Parallel(p1 8 hard) IndexScan(p1) */
EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
LOG: pg_hint_plan:
(23 rows)
-- This hint doesn't turn on parallel, so the Parallel hint is ignored
-show max_parallel_workers_per_gather;
- max_parallel_workers_per_gather
----------------------------------
- 0
-(1 row)
-
+set max_parallel_workers_per_gather TO 0;
/*+Parallel(p1 0 hard) IndexScan(p1) */
EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
LOG: pg_hint_plan:
-- parallel hinting on any relation enables parallel
SET parallel_setup_cost to 0;
SET parallel_tuple_cost to 0;
-SET min_parallel_relation_size to 0;
+SET min_parallel_table_scan_size to 0;
+SET min_parallel_index_scan_size to 0;
SET max_parallel_workers_per_gather to 0;
/*+Parallel(p1 8) */
EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
-- applies largest number of workers on merged parallel paths
SET parallel_setup_cost to DEFAULT;
SET parallel_tuple_cost to DEFAULT;
-SET min_parallel_relation_size to DEFAULT;
+SET min_parallel_table_scan_size to DEFAULT;
+SET min_parallel_index_scan_size to DEFAULT;
SET max_parallel_workers_per_gather to 8;
/*+Parallel(p1 5 hard)Parallel(p2 6 hard) */
EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
-- num of workers of non-hinted relations should be default value
SET parallel_setup_cost to 0;
SET parallel_tuple_cost to 0;
-SET min_parallel_relation_size to 0;
+SET min_parallel_table_scan_size to 0;
+SET min_parallel_index_scan_size to 0;
SET max_parallel_workers_per_gather to 3;
SET enable_indexscan to false;
/*+Parallel(p1 8 hard) */
SET enable_indexscan to DEFAULT;
SET parallel_setup_cost to 0;
SET parallel_tuple_cost to 0;
-SET min_parallel_relation_size to 0;
+SET min_parallel_table_scan_size to 0;
+SET min_parallel_index_scan_size to 0;
SET max_parallel_workers_per_gather to 5;
EXPLAIN (COSTS false) SELECT * FROM p1;
QUERY PLAN
CREATE INDEX ti1_i4 ON s1.ti1 (c2, c4, c4, c4);
CREATE INDEX ti1_btree ON s1.ti1 USING btree (c1);
CREATE INDEX ti1_hash ON s1.ti1 USING hash (c1);
-WARNING: hash indexes are not WAL-logged and their use is discouraged
CREATE INDEX ti1_gist ON s1.ti1 USING gist (c1);
CREATE INDEX ti1_gin ON s1.ti1 USING gin (c1);
CREATE INDEX ti1_expr ON s1.ti1 ((c1 < 100));
#include "miscadmin.h"
#include "nodes/nodeFuncs.h"
#include "nodes/params.h"
+#include "nodes/relation.h"
#include "optimizer/clauses.h"
#include "optimizer/cost.h"
#include "optimizer/geqo.h"
#include "optimizer/prep.h"
#include "optimizer/restrictinfo.h"
#include "parser/analyze.h"
+#include "parser/parsetree.h"
#include "parser/scansup.h"
#include "tcop/utility.h"
#include "utils/builtins.h"
/* Initial values of parameters */
int init_scan_mask; /* enable_* mask */
int init_nworkers; /* max_parallel_workers_per_gather */
- int init_min_para_size; /* min_parallel_relation_size*/
+ /* min_parallel_table_scan_size*/
+ int init_min_para_tablescan_size;
+ /* min_parallel_index_scan_size*/
+ int init_min_para_indexscan_size;
int init_paratup_cost; /* parallel_tuple_cost */
int init_parasetup_cost;/* parallel_setup_cost */
Index rti, RangeTblEntry *rte);
static void create_plain_partial_paths(PlannerInfo *root,
RelOptInfo *rel);
-static int compute_parallel_worker(RelOptInfo *rel, BlockNumber pages);
-
+static void add_paths_to_append_rel(PlannerInfo *root, RelOptInfo *rel,
+ List *live_childrels);
static void make_rels_by_clause_joins(PlannerInfo *root, RelOptInfo *old_rel,
ListCell *other_rels);
static void make_rels_by_clauseless_joins(PlannerInfo *root,
static void set_append_rel_pathlist(PlannerInfo *root, RelOptInfo *rel,
Index rti, RangeTblEntry *rte);
static void generate_mergeappend_paths(PlannerInfo *root, RelOptInfo *rel,
- List *live_childrels,
- List *all_child_pathkeys);
+ List *live_childrels,
+ List *all_child_pathkeys,
+ List *partitioned_rels);
static Path *get_cheapest_parameterized_child_path(PlannerInfo *root,
RelOptInfo *rel,
Relids required_outer);
hstate->scan_hints = NULL;
hstate->init_scan_mask = 0;
hstate->init_nworkers = 0;
- hstate->init_min_para_size = 0;
+ hstate->init_min_para_tablescan_size = 0;
+ hstate->init_min_para_indexscan_size = 0;
hstate->init_paratup_cost = 0;
hstate->init_parasetup_cost = 0;
hstate->parent_relid = 0;
{
set_config_int32_option("parallel_tuple_cost", 0, state->context);
set_config_int32_option("parallel_setup_cost", 0, state->context);
- set_config_int32_option("min_parallel_relation_size", 0,
+ set_config_int32_option("min_parallel_table_scan_size", 0,
+ state->context);
+ set_config_int32_option("min_parallel_index_scan_size", 0,
state->context);
}
else
state->init_paratup_cost, state->context);
set_config_int32_option("parallel_setup_cost",
state->init_parasetup_cost, state->context);
- set_config_int32_option("min_parallel_relation_size",
- state->init_min_para_size, state->context);
+ set_config_int32_option("min_parallel_table_scan_size",
+ state->init_min_para_tablescan_size,
+ state->context);
+ set_config_int32_option("min_parallel_index_scan_size",
+ state->init_min_para_indexscan_size,
+ state->context);
}
}
current_hint_state->init_scan_mask = get_current_scan_mask();
current_hint_state->init_join_mask = get_current_join_mask();
- current_hint_state->init_min_para_size = min_parallel_relation_size;
+ current_hint_state->init_min_para_tablescan_size =
+ min_parallel_table_scan_size;
+ current_hint_state->init_min_para_indexscan_size =
+ min_parallel_index_scan_size;
current_hint_state->init_paratup_cost = parallel_tuple_cost;
current_hint_state->init_parasetup_cost = parallel_setup_cost;
EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
EXPLAIN (COSTS false) SELECT val FROM p2 WHERE val >= '50' AND val <= '51' AND p2.ctid = '(1,1)';
-/*+IndexScan(p2 p2_val)*/
+
+-- Inhibit parallel exection to avoid interfaring the hint
+set max_parallel_workers_per_gather to 0;
+/*+ IndexScan(p2 p2_val)*/
EXPLAIN (COSTS false) SELECT val FROM p2 WHERE val >= '50' AND val <= '51' AND p2.ctid = '(1,1)';
/*+IndexScan(p2 p2_pkey)*/
EXPLAIN (COSTS false) SELECT * FROM p2 WHERE id >= 50 AND id <= 51 AND p2.ctid = '(1,1)';
/*+ Rows(t1 t3 *10) */
EXPLAIN SELECT * FROM t1 JOIN t2 ON (t1.id = t2.id) JOIN t3 ON (t3.id = t2.id);
\o
+set max_parallel_workers_per_gather to DEFAULT;
\! sql/maskout.sh results/pg_hint_plan.tmpout
\! rm results/pg_hint_plan.tmpout
SET parallel_setup_cost to 0;
SET parallel_tuple_cost to 0;
-SET min_parallel_relation_size to 0;
+SET min_parallel_table_scan_size to 0;
+SET min_parallel_index_scan_size to 0;
SET max_parallel_workers_per_gather to DEFAULT;
/*+Parallel(t1 8)*/
-- Queries on inheritance tables
SET parallel_setup_cost to 0;
SET parallel_tuple_cost to 0;
-SET min_parallel_relation_size to 0;
+SET min_parallel_table_scan_size to 0;
+SET min_parallel_index_scan_size to 0;
/*+Parallel(p1 8)*/
EXPLAIN (COSTS false) SELECT * FROM p1;
SET parallel_setup_cost to DEFAULT;
SET parallel_tuple_cost to DEFAULT;
-SET min_parallel_relation_size to DEFAULT;
+SET min_parallel_table_scan_size to DEFAULT;
+SET min_parallel_index_scan_size to DEFAULT;
/*+Parallel(p1 8 hard)*/
EXPLAIN (COSTS false) SELECT * FROM p1;
SET parallel_setup_cost to 0;
SET parallel_tuple_cost to 0;
-SET min_parallel_relation_size to 0;
+SET min_parallel_table_scan_size to 0;
+SET min_parallel_index_scan_size to 0;
/*+Parallel(p1_c1_c1 8 soft) Parallel(p2_c1_c1 0)*/
EXPLAIN (COSTS false) SELECT * FROM p1_c1_c1 join p2_c1_c1 on p1_c1_c1.id = p2_c1_c1.id;
-- Joins on inheritance tables
SET parallel_setup_cost to 0;
SET parallel_tuple_cost to 0;
-SET min_parallel_relation_size to 0;
+SET min_parallel_table_scan_size to 0;
+SET min_parallel_index_scan_size to 0;
/*+Parallel(p1 8)*/
EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
SET parallel_setup_cost to DEFAULT;
SET parallel_tuple_cost to DEFAULT;
-SET min_parallel_relation_size to DEFAULT;
+SET min_parallel_table_scan_size to DEFAULT;
+SET min_parallel_index_scan_size to DEFAULT;
/*+Parallel(p2 8 soft)*/
EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
/*+Parallel(p1 8 hard) SeqScan(p1) */
EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
--- we don't have parallel over index scans so far
+-- Index partial scan is not handled yet.
/*+Parallel(p1 8 hard) IndexScan(p1) */
EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
-- This hint doesn't turn on parallel, so the Parallel hint is ignored
-show max_parallel_workers_per_gather;
+set max_parallel_workers_per_gather TO 0;
/*+Parallel(p1 0 hard) IndexScan(p1) */
EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
-- parallel hinting on any relation enables parallel
SET parallel_setup_cost to 0;
SET parallel_tuple_cost to 0;
-SET min_parallel_relation_size to 0;
+SET min_parallel_table_scan_size to 0;
+SET min_parallel_index_scan_size to 0;
SET max_parallel_workers_per_gather to 0;
/*+Parallel(p1 8) */
-- applies largest number of workers on merged parallel paths
SET parallel_setup_cost to DEFAULT;
SET parallel_tuple_cost to DEFAULT;
-SET min_parallel_relation_size to DEFAULT;
+SET min_parallel_table_scan_size to DEFAULT;
+SET min_parallel_index_scan_size to DEFAULT;
SET max_parallel_workers_per_gather to 8;
/*+Parallel(p1 5 hard)Parallel(p2 6 hard) */
EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
-- num of workers of non-hinted relations should be default value
SET parallel_setup_cost to 0;
SET parallel_tuple_cost to 0;
-SET min_parallel_relation_size to 0;
+SET min_parallel_table_scan_size to 0;
+SET min_parallel_index_scan_size to 0;
SET max_parallel_workers_per_gather to 3;
SET enable_indexscan to false;
SET enable_indexscan to DEFAULT;
SET parallel_setup_cost to 0;
SET parallel_tuple_cost to 0;
-SET min_parallel_relation_size to 0;
+SET min_parallel_table_scan_size to 0;
+SET min_parallel_index_scan_size to 0;
SET max_parallel_workers_per_gather to 5;
EXPLAIN (COSTS false) SELECT * FROM p1;