From edba7e9ccbb163c4d7cfeeb0a22daaba15cc3f00 Mon Sep 17 00:00:00 2001 From: yibin Date: Tue, 3 Dec 2024 17:11:47 +0800 Subject: [PATCH] planner: Add left side operator info for hash join execution summary (#57814) ref pingcap/tidb#56233, close pingcap/tidb#57819 --- pkg/distsql/distsql_test.go | 2 +- .../test/jointest/hashjoin/hash_join_test.go | 10 +- .../cbotest/testdata/analyze_suite_out.json | 6 +- .../testdata/enforce_mpp_suite_out.json | 22 +- .../hint/testdata/integration_suite_out.json | 12 +- .../mpp/testdata/integration_suite_out.json | 140 ++++---- .../testdata/plan_suite_out.json | 50 +-- .../testdata/integration_suite_out.json | 20 +- .../rule/testdata/join_reorder_suite_out.json | 100 +++--- .../rule/testdata/outer2inner_out.json | 76 ++-- .../testdata/integration_suite_out.json | 2 +- .../testdata/plan_normalized_suite_out.json | 10 +- .../casetest/testdata/stats_suite_out.json | 16 +- pkg/planner/core/explain.go | 22 +- .../core/operator/logicalop/logical_join.go | 5 + .../core/testdata/index_merge_suite_out.json | 6 +- .../runtime_filter_generator_suite_out.json | 2 +- pkg/planner/core/tests/redact/redact_test.go | 8 +- pkg/util/execdetails/execdetails.go | 12 +- tests/integrationtest/r/bindinfo/bind.result | 8 +- .../integrationtest/r/clustered_index.result | 4 +- tests/integrationtest/r/cte.result | 48 +-- .../r/executor/aggregate.result | 8 +- .../r/executor/executor.result | 50 +-- .../integrationtest/r/executor/expand.result | 4 +- .../integrationtest/r/executor/explain.result | 8 +- .../r/executor/index_lookup_join.result | 2 +- .../r/executor/index_lookup_merge_join.result | 2 +- .../r/executor/jointest/join.result | 8 +- .../r/executor/merge_join.result | 24 +- .../integrationtest/r/explain_complex.result | 8 +- tests/integrationtest/r/explain_cte.result | 2 +- tests/integrationtest/r/explain_easy.result | 60 ++-- .../r/explain_easy_stats.result | 8 +- .../r/explain_union_scan.result | 2 +- .../r/expression/explain.result | 48 +-- tests/integrationtest/r/index_join.result | 2 +- tests/integrationtest/r/index_merge.result | 10 +- tests/integrationtest/r/naaj.result | 48 +-- .../r/planner/cascades/integration.result | 12 +- .../core/casetest/expression_rewriter.result | 4 +- .../planner/core/casetest/index/index.result | 2 +- .../planner/core/casetest/integration.result | 30 +- .../physicalplantest/physical_plan.result | 132 +++---- .../casetest/predicate_simplification.result | 4 +- .../core/casetest/pushdown/push_down.result | 8 +- .../casetest/rule/rule_join_reorder.result | 334 +++++++++--------- .../casetest/rule/rule_result_reorder.result | 20 +- .../integrationtest/r/planner/core/cbo.result | 8 +- .../r/planner/core/integration.result | 24 +- .../core/rule_constant_propagation.result | 10 +- .../r/planner/core/rule_join_reorder.result | 10 +- tests/integrationtest/r/select.result | 44 +-- .../r/statistics/integration.result | 8 +- tests/integrationtest/r/subquery.result | 8 +- tests/integrationtest/r/topn_push_down.result | 12 +- tests/integrationtest/r/tpch.result | 14 +- tests/integrationtest/r/util/ranger.result | 2 +- .../t/planner/core/integration.test | 10 +- 59 files changed, 788 insertions(+), 783 deletions(-) diff --git a/pkg/distsql/distsql_test.go b/pkg/distsql/distsql_test.go index 0f5a9dcf4b..9ae5b89d6c 100644 --- a/pkg/distsql/distsql_test.go +++ b/pkg/distsql/distsql_test.go @@ -123,7 +123,7 @@ func TestSelectResultRuntimeStats(t *testing.T) { stmtStats.RegisterStats(1, s1) stmtStats.RegisterStats(1, &s2) stats := stmtStats.GetRootStats(1) - expect := "time:1s, loops:1, cop_task: {num: 4, max: 1s, min: 1ms, avg: 500.5ms, p95: 1s, max_proc_keys: 200, p95_proc_keys: 200, tot_proc: 2s, tot_wait: 2s, copr_cache_hit_ratio: 0.00, max_distsql_concurrency: 15}, backoff{RegionMiss: 2ms}" + expect := "time:1s, open:0s, close:0s, loops:1, cop_task: {num: 4, max: 1s, min: 1ms, avg: 500.5ms, p95: 1s, max_proc_keys: 200, p95_proc_keys: 200, tot_proc: 2s, tot_wait: 2s, copr_cache_hit_ratio: 0.00, max_distsql_concurrency: 15}, backoff{RegionMiss: 2ms}" require.Equal(t, expect, stats.String()) // Test for idempotence. require.Equal(t, expect, stats.String()) diff --git a/pkg/executor/test/jointest/hashjoin/hash_join_test.go b/pkg/executor/test/jointest/hashjoin/hash_join_test.go index e7550657e9..ccb369c841 100644 --- a/pkg/executor/test/jointest/hashjoin/hash_join_test.go +++ b/pkg/executor/test/jointest/hashjoin/hash_join_test.go @@ -55,7 +55,7 @@ func TestIndexNestedLoopHashJoin(t *testing.T) { tk.MustExec("analyze table s all columns") // Test IndexNestedLoopHashJoin keepOrder. tk.MustQuery("explain format = 'brief' select /*+ INL_HASH_JOIN(s) */ * from t left join s on t.a=s.a order by t.pk").Check(testkit.Rows( - "IndexHashJoin 100.00 root left outer join, inner:TableReader, outer key:test.t.a, inner key:test.s.a, equal cond:eq(test.t.a, test.s.a)", + "IndexHashJoin 100.00 root left outer join, inner:TableReader, left side:TableReader, outer key:test.t.a, inner key:test.s.a, equal cond:eq(test.t.a, test.s.a)", "├─TableReader(Build) 100.00 root data:TableFullScan", "│ └─TableFullScan 100.00 cop[tikv] table:t keep order:true", "└─TableReader(Probe) 100.00 root data:TableRangeScan", @@ -91,7 +91,7 @@ func TestIndexNestedLoopHashJoin(t *testing.T) { tk.MustExec("set @@tidb_index_join_batch_size=2") tk.MustQuery("desc format = 'brief' select * from t l1 where exists ( select * from t l2 where l2.l_orderkey = l1.l_orderkey and l2.l_suppkey <> l1.l_suppkey ) order by `l_orderkey`,`l_linenumber`;").Check(testkit.Rows( "Sort 7.20 root test.t.l_orderkey, test.t.l_linenumber", - "└─IndexHashJoin 7.20 root semi join, inner:IndexLookUp, outer key:test.t.l_orderkey, inner key:test.t.l_orderkey, equal cond:eq(test.t.l_orderkey, test.t.l_orderkey), other cond:ne(test.t.l_suppkey, test.t.l_suppkey)", + "└─IndexHashJoin 7.20 root semi join, inner:IndexLookUp, left side:TableReader, outer key:test.t.l_orderkey, inner key:test.t.l_orderkey, equal cond:eq(test.t.l_orderkey, test.t.l_orderkey), other cond:ne(test.t.l_suppkey, test.t.l_suppkey)", " ├─TableReader(Build) 9.00 root data:Selection", " │ └─Selection 9.00 cop[tikv] not(isnull(test.t.l_suppkey))", " │ └─TableFullScan 9.00 cop[tikv] table:l1 keep order:false", @@ -102,7 +102,7 @@ func TestIndexNestedLoopHashJoin(t *testing.T) { tk.MustQuery("select * from t l1 where exists ( select * from t l2 where l2.l_orderkey = l1.l_orderkey and l2.l_suppkey <> l1.l_suppkey )order by `l_orderkey`,`l_linenumber`;").Check(testkit.Rows("0 0 0 0", "0 1 0 1", "0 2 0 0", "1 0 1 0", "1 1 1 1", "1 2 1 0", "2 0 0 0", "2 1 0 1", "2 2 0 0")) tk.MustQuery("desc format = 'brief' select count(*) from t l1 where exists ( select * from t l2 where l2.l_orderkey = l1.l_orderkey and l2.l_suppkey <> l1.l_suppkey );").Check(testkit.Rows( "StreamAgg 1.00 root funcs:count(1)->Column#11", - "└─IndexHashJoin 7.20 root semi join, inner:IndexLookUp, outer key:test.t.l_orderkey, inner key:test.t.l_orderkey, equal cond:eq(test.t.l_orderkey, test.t.l_orderkey), other cond:ne(test.t.l_suppkey, test.t.l_suppkey)", + "└─IndexHashJoin 7.20 root semi join, inner:IndexLookUp, left side:TableReader, outer key:test.t.l_orderkey, inner key:test.t.l_orderkey, equal cond:eq(test.t.l_orderkey, test.t.l_orderkey), other cond:ne(test.t.l_suppkey, test.t.l_suppkey)", " ├─TableReader(Build) 9.00 root data:Selection", " │ └─Selection 9.00 cop[tikv] not(isnull(test.t.l_suppkey))", " │ └─TableFullScan 9.00 cop[tikv] table:l1 keep order:false", @@ -235,7 +235,7 @@ func TestOuterTableBuildHashTableIsuse13933(t *testing.T) { tk.MustExec("insert into s values (1,2),(2,1),(11,11)") tk.MustQuery("select /*+ HASH_JOIN_BUILD(t) */ * from t left join s on s.a > t.a").Sort().Check(testkit.Rows("1 2 11 11", "1 2 2 1", "11 11 ")) tk.MustQuery("explain format = 'brief' select /*+ HASH_JOIN_BUILD(t) */ * from t left join s on s.a > t.a").Check(testkit.Rows( - "HashJoin 99900000.00 root CARTESIAN left outer join, other cond:gt(test.s.a, test.t.a)", + "HashJoin 99900000.00 root CARTESIAN left outer join, left side:TableReader, other cond:gt(test.s.a, test.t.a)", "├─TableReader(Build) 10000.00 root data:TableFullScan", "│ └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo", "└─TableReader(Probe) 9990.00 root data:Selection", @@ -248,7 +248,7 @@ func TestOuterTableBuildHashTableIsuse13933(t *testing.T) { tk.MustExec("Insert into t values (11,2),(1,2),(5,2)") tk.MustQuery("select /*+ INL_HASH_JOIN(s) */ * from t left join s on s.b=t.b and s.a < t.a;").Sort().Check(testkit.Rows("1 2 ", "11 2 1 2", "5 2 1 2")) tk.MustQuery("explain format = 'brief' select /*+ INL_HASH_JOIN(s) */ * from t left join s on s.b=t.b and s.a < t.a;").Check(testkit.Rows( - "IndexHashJoin 12475.01 root left outer join, inner:IndexLookUp, outer key:test.t.b, inner key:test.s.b, equal cond:eq(test.t.b, test.s.b), other cond:lt(test.s.a, test.t.a)", + "IndexHashJoin 12475.01 root left outer join, inner:IndexLookUp, left side:TableReader, outer key:test.t.b, inner key:test.s.b, equal cond:eq(test.t.b, test.s.b), other cond:lt(test.s.a, test.t.a)", "├─TableReader(Build) 10000.00 root data:TableFullScan", "│ └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo", "└─IndexLookUp(Probe) 12475.01 root ", diff --git a/pkg/planner/core/casetest/cbotest/testdata/analyze_suite_out.json b/pkg/planner/core/casetest/cbotest/testdata/analyze_suite_out.json index 41838a6310..a74d16649a 100644 --- a/pkg/planner/core/casetest/cbotest/testdata/analyze_suite_out.json +++ b/pkg/planner/core/casetest/cbotest/testdata/analyze_suite_out.json @@ -160,7 +160,7 @@ ], "Plan": [ "Limit 1.00 root offset:0, count:1", - "└─MergeJoin 1.00 root left outer semi join, left key:test.t.a, right key:test.t.b", + "└─MergeJoin 1.00 root left outer semi join, left side:TopN, left key:test.t.a, right key:test.t.b", " ├─IndexReader(Build) 25.00 root index:IndexFullScan", " │ └─IndexFullScan 25.00 cop[tikv] table:t2, index:idx_bc(b, c) keep order:true", " └─TopN(Probe) 1.00 root test.t.a, offset:0, count:1", @@ -380,7 +380,7 @@ "Cases": [ [ "Projection 10.00 root Column#22", - "└─Apply 10.00 root CARTESIAN left outer semi join, other cond:eq(test.t.c, Column#21)", + "└─Apply 10.00 root CARTESIAN left outer semi join, left side:IndexReader, other cond:eq(test.t.c, Column#21)", " ├─IndexReader(Build) 10.00 root index:IndexFullScan", " │ └─IndexFullScan 10.00 cop[tikv] table:t, index:idx(c, b, a) keep order:false", " └─StreamAgg(Probe) 10.00 root funcs:count(1)->Column#21", @@ -394,7 +394,7 @@ ], [ "Projection 10.00 root Column#13", - "└─Apply 10.00 root CARTESIAN left outer join", + "└─Apply 10.00 root CARTESIAN left outer join, left side:IndexReader", " ├─IndexReader(Build) 10.00 root index:IndexFullScan", " │ └─IndexFullScan 10.00 cop[tikv] table:t, index:idx(c, b, a) keep order:false", " └─MaxOneRow(Probe) 10.00 root ", diff --git a/pkg/planner/core/casetest/enforcempp/testdata/enforce_mpp_suite_out.json b/pkg/planner/core/casetest/enforcempp/testdata/enforce_mpp_suite_out.json index 8a81daccb8..78a454b88e 100644 --- a/pkg/planner/core/casetest/enforcempp/testdata/enforce_mpp_suite_out.json +++ b/pkg/planner/core/casetest/enforcempp/testdata/enforce_mpp_suite_out.json @@ -623,7 +623,7 @@ "└─ExchangeSender_50 8000.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection_8 8000.00 mpp[tiflash] test.t.a", " └─Selection_49 8000.00 mpp[tiflash] or(gt(test.t.a, 1), Column#3)", - " └─HashJoin_46 10000.00 mpp[tiflash] left outer semi join, equal:[eq(test.t.a, test.t.a)]", + " └─HashJoin_46 10000.00 mpp[tiflash] left outer semi join, left side:TableFullScan_24, equal:[eq(test.t.a, test.t.a)]", " ├─ExchangeReceiver_27(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender_26 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan_25 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", @@ -638,7 +638,7 @@ "└─ExchangeSender_50 8000.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection_8 8000.00 mpp[tiflash] test.t.a", " └─Selection_49 8000.00 mpp[tiflash] or(gt(test.t.a, 1), Column#3)", - " └─HashJoin_46 10000.00 mpp[tiflash] anti left outer semi join, equal:[eq(test.t.a, test.t.a)]", + " └─HashJoin_46 10000.00 mpp[tiflash] anti left outer semi join, left side:TableFullScan_24, equal:[eq(test.t.a, test.t.a)]", " ├─ExchangeReceiver_27(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender_26 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan_25 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", @@ -649,7 +649,7 @@ { "SQL": "explain select a from t where t.a not in (select a from s where t.a<1); -- 9. non left join has left conditions", "Plan": [ - "MergeJoin_10 8000.00 root anti semi join, left key:test.t.a, right key:test.s.a, left cond:lt(test.t.a, 1)", + "MergeJoin_10 8000.00 root anti semi join, left side:TableReader_23, left key:test.t.a, right key:test.s.a, left cond:lt(test.t.a, 1)", "├─TableReader_26(Build) 10000.00 root data:TableFullScan_25", "│ └─TableFullScan_25 10000.00 cop[tikv] table:s keep order:true, stats:pseudo", "└─TableReader_23(Probe) 10000.00 root data:TableFullScan_22", @@ -1556,7 +1556,7 @@ "Plan": [ "TableReader_29 8000.00 root MppVersion: 2, data:ExchangeSender_28", "└─ExchangeSender_28 8000.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin_27 8000.00 mpp[tiflash] Null-aware anti semi join, equal:[eq(test.t.a, test.s.a)]", + " └─HashJoin_27 8000.00 mpp[tiflash] Null-aware anti semi join, left side:TableFullScan_11, equal:[eq(test.t.a, test.s.a)]", " ├─ExchangeReceiver_14(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender_13 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan_12 10000.00 mpp[tiflash] table:s keep order:false, stats:pseudo", @@ -1569,7 +1569,7 @@ "Plan": [ "TableReader_30 8000.00 root MppVersion: 2, data:ExchangeSender_29", "└─ExchangeSender_29 8000.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin_28 8000.00 mpp[tiflash] Null-aware anti semi join, equal:[eq(test.t.a, test.s.a)], other cond:gt(test.t.c, test.s.c)", + " └─HashJoin_28 8000.00 mpp[tiflash] Null-aware anti semi join, left side:TableFullScan_12, equal:[eq(test.t.a, test.s.a)], other cond:gt(test.t.c, test.s.c)", " ├─ExchangeReceiver_15(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender_14 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan_13 10000.00 mpp[tiflash] table:s keep order:false, stats:pseudo", @@ -1582,7 +1582,7 @@ "Plan": [ "TableReader_29 8000.00 root MppVersion: 2, data:ExchangeSender_28", "└─ExchangeSender_28 8000.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin_27 8000.00 mpp[tiflash] Null-aware anti semi join, equal:[eq(test.t.a, test.s.a) eq(test.t.b, test.s.b)]", + " └─HashJoin_27 8000.00 mpp[tiflash] Null-aware anti semi join, left side:TableFullScan_11, equal:[eq(test.t.a, test.s.a) eq(test.t.b, test.s.b)]", " ├─ExchangeReceiver_14(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender_13 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan_12 10000.00 mpp[tiflash] table:s keep order:false, stats:pseudo", @@ -1595,7 +1595,7 @@ "Plan": [ "TableReader_30 8000.00 root MppVersion: 2, data:ExchangeSender_29", "└─ExchangeSender_29 8000.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin_28 8000.00 mpp[tiflash] Null-aware anti semi join, equal:[eq(test.t.a, test.s.a) eq(test.t.b, test.s.b)], other cond:lt(test.t.c, test.s.c)", + " └─HashJoin_28 8000.00 mpp[tiflash] Null-aware anti semi join, left side:TableFullScan_12, equal:[eq(test.t.a, test.s.a) eq(test.t.b, test.s.b)], other cond:lt(test.t.c, test.s.c)", " ├─ExchangeReceiver_15(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender_14 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan_13 10000.00 mpp[tiflash] table:s keep order:false, stats:pseudo", @@ -1608,7 +1608,7 @@ "Plan": [ "TableReader_29 10000.00 root MppVersion: 2, data:ExchangeSender_28", "└─ExchangeSender_28 10000.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin_27 10000.00 mpp[tiflash] Null-aware anti left outer semi join, equal:[eq(test.t.a, test.s.a)]", + " └─HashJoin_27 10000.00 mpp[tiflash] Null-aware anti left outer semi join, left side:TableFullScan_11, equal:[eq(test.t.a, test.s.a)]", " ├─ExchangeReceiver_14(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender_13 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan_12 10000.00 mpp[tiflash] table:s keep order:false, stats:pseudo", @@ -1621,7 +1621,7 @@ "Plan": [ "TableReader_30 10000.00 root MppVersion: 2, data:ExchangeSender_29", "└─ExchangeSender_29 10000.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin_28 10000.00 mpp[tiflash] Null-aware anti left outer semi join, equal:[eq(test.t.a, test.s.a)], other cond:gt(test.t.c, test.s.c)", + " └─HashJoin_28 10000.00 mpp[tiflash] Null-aware anti left outer semi join, left side:TableFullScan_12, equal:[eq(test.t.a, test.s.a)], other cond:gt(test.t.c, test.s.c)", " ├─ExchangeReceiver_15(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender_14 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan_13 10000.00 mpp[tiflash] table:s keep order:false, stats:pseudo", @@ -1634,7 +1634,7 @@ "Plan": [ "TableReader_29 10000.00 root MppVersion: 2, data:ExchangeSender_28", "└─ExchangeSender_28 10000.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin_27 10000.00 mpp[tiflash] Null-aware anti left outer semi join, equal:[eq(test.t.a, test.s.a) eq(test.t.b, test.s.b)]", + " └─HashJoin_27 10000.00 mpp[tiflash] Null-aware anti left outer semi join, left side:TableFullScan_11, equal:[eq(test.t.a, test.s.a) eq(test.t.b, test.s.b)]", " ├─ExchangeReceiver_14(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender_13 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan_12 10000.00 mpp[tiflash] table:s keep order:false, stats:pseudo", @@ -1647,7 +1647,7 @@ "Plan": [ "TableReader_30 10000.00 root MppVersion: 2, data:ExchangeSender_29", "└─ExchangeSender_29 10000.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin_28 10000.00 mpp[tiflash] Null-aware anti left outer semi join, equal:[eq(test.t.a, test.s.a) eq(test.t.b, test.s.b)], other cond:lt(test.t.c, test.s.c)", + " └─HashJoin_28 10000.00 mpp[tiflash] Null-aware anti left outer semi join, left side:TableFullScan_12, equal:[eq(test.t.a, test.s.a) eq(test.t.b, test.s.b)], other cond:lt(test.t.c, test.s.c)", " ├─ExchangeReceiver_15(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender_14 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan_13 10000.00 mpp[tiflash] table:s keep order:false, stats:pseudo", diff --git a/pkg/planner/core/casetest/hint/testdata/integration_suite_out.json b/pkg/planner/core/casetest/hint/testdata/integration_suite_out.json index a82d04cf14..70ebc16d86 100644 --- a/pkg/planner/core/casetest/hint/testdata/integration_suite_out.json +++ b/pkg/planner/core/casetest/hint/testdata/integration_suite_out.json @@ -1179,7 +1179,7 @@ "└─HashJoin 15609.38 root inner join, equal:[eq(test.t2.a, test.t1.a)]", " ├─TableReader(Build) 10000.00 root data:TableFullScan", " │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", - " └─HashJoin(Probe) 12487.50 root left outer join, equal:[eq(test.t2.b, test.t3.b)]", + " └─HashJoin(Probe) 12487.50 root left outer join, left side:TableReader, equal:[eq(test.t2.b, test.t3.b)]", " ├─TableReader(Build) 9990.00 root data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t3.b))", " │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", @@ -1196,7 +1196,7 @@ "└─HashJoin 15609.38 root inner join, equal:[eq(test.t2.a, test.t1.a)]", " ├─TableReader(Build) 10000.00 root data:TableFullScan", " │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", - " └─HashJoin(Probe) 12487.50 root left outer join, equal:[eq(test.t2.b, test.t3.b)]", + " └─HashJoin(Probe) 12487.50 root left outer join, left side:TableReader, equal:[eq(test.t2.b, test.t3.b)]", " ├─TableReader(Build) 9990.00 root data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t3.b))", " │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", @@ -1210,7 +1210,7 @@ "SQL": "explain format = 'brief' select /*+ leading(t3), merge_join(t1) */ * from t1 right join t2 on t1.a = t2.a join t3 on t2.b = t3.b;", "Plan": [ "Projection 15609.38 root test.t1.a, test.t1.b, test.t2.a, test.t2.b, test.t3.a, test.t3.b", - "└─MergeJoin 15609.38 root right outer join, left key:test.t1.a, right key:test.t2.a", + "└─MergeJoin 15609.38 root right outer join, left side:Sort, left key:test.t1.a, right key:test.t2.a", " ├─Sort(Build) 10000.00 root test.t1.a", " │ └─TableReader 10000.00 root data:TableFullScan", " │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", @@ -1228,7 +1228,7 @@ { "SQL": "explain format = 'brief' select /*+ leading(t2), merge_join(t2) */ * from t1 right join t2 on t1.a = t2.a join t3 on t2.b = t3.b;", "Plan": [ - "HashJoin 15609.38 root right outer join, equal:[eq(test.t1.a, test.t2.a)]", + "HashJoin 15609.38 root right outer join, left side:TableReader, equal:[eq(test.t1.a, test.t2.a)]", "├─TableReader(Build) 10000.00 root data:TableFullScan", "│ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", "└─MergeJoin(Probe) 12487.50 root inner join, left key:test.t2.b, right key:test.t3.b", @@ -1485,7 +1485,7 @@ { "SQL": "explain format = 'brief' SELECT /*+ leading(t2@sel_2), merge_join(t) */ * FROM t join t1 on t.a = t1.a WHERE EXISTS (SELECT 1 FROM t2 WHERE t2.b = t1.b);", "Plan": [ - "HashJoin 9990.00 root semi join, equal:[eq(test.t1.b, test.t2.b)]", + "HashJoin 9990.00 root semi join, left side:Projection, equal:[eq(test.t1.b, test.t2.b)]", "├─IndexReader(Build) 9990.00 root index:IndexFullScan", "│ └─IndexFullScan 9990.00 cop[tikv] table:t2, index:idx_b(b) keep order:false, stats:pseudo", "└─Projection(Probe) 12487.50 root test.t.a, test.t.b, test.t1.a, test.t1.b", @@ -1505,7 +1505,7 @@ { "SQL": "explain format = 'brief' SELECT /*+ leading(t1), inl_join(t1) */ * FROM t join t1 on t.a = t1.a WHERE EXISTS (SELECT 1 FROM t2 WHERE t2.b = t1.b);", "Plan": [ - "HashJoin 9990.00 root semi join, equal:[eq(test.t1.b, test.t2.b)]", + "HashJoin 9990.00 root semi join, left side:Projection, equal:[eq(test.t1.b, test.t2.b)]", "├─IndexReader(Build) 9990.00 root index:IndexFullScan", "│ └─IndexFullScan 9990.00 cop[tikv] table:t2, index:idx_b(b) keep order:false, stats:pseudo", "└─Projection(Probe) 12487.50 root test.t.a, test.t.b, test.t1.a, test.t1.b", diff --git a/pkg/planner/core/casetest/mpp/testdata/integration_suite_out.json b/pkg/planner/core/casetest/mpp/testdata/integration_suite_out.json index 4fd3b28008..c03fc744e2 100644 --- a/pkg/planner/core/casetest/mpp/testdata/integration_suite_out.json +++ b/pkg/planner/core/casetest/mpp/testdata/integration_suite_out.json @@ -69,7 +69,7 @@ "└─TableReader 8.00 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 8.00 mpp[tiflash] test.fact_t.d1_k", - " └─HashJoin 8.00 mpp[tiflash] left outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", + " └─HashJoin 8.00 mpp[tiflash] left outer join, left side:TableFullScan, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.d1_t.d1_k))", @@ -84,7 +84,7 @@ "└─TableReader 8.00 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 8.00 mpp[tiflash] test.fact_t.d1_k", - " └─HashJoin 8.00 mpp[tiflash] right outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", + " └─HashJoin 8.00 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", " ├─ExchangeReceiver(Build) 8.00 mpp[tiflash] ", " │ └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 8.00 mpp[tiflash] not(isnull(test.fact_t.d1_k))", @@ -115,7 +115,7 @@ "└─TableReader 8.00 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 8.00 mpp[tiflash] test.fact_t.d1_k", - " └─HashJoin 8.00 mpp[tiflash] left outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], left cond:[gt(test.fact_t.col1, 10)]", + " └─HashJoin 8.00 mpp[tiflash] left outer join, left side:TableFullScan, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], left cond:[gt(test.fact_t.col1, 10)]", " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.d1_t.d1_k))", @@ -130,7 +130,7 @@ "└─TableReader 8.00 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 8.00 mpp[tiflash] test.fact_t.d1_k", - " └─HashJoin 8.00 mpp[tiflash] left outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], left cond:[gt(test.fact_t.col2, 10)], other cond:gt(test.fact_t.col1, test.d1_t.value)", + " └─HashJoin 8.00 mpp[tiflash] left outer join, left side:TableFullScan, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], left cond:[gt(test.fact_t.col2, 10)], other cond:gt(test.fact_t.col1, test.d1_t.value)", " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.d1_t.d1_k)), not(isnull(test.d1_t.value))", @@ -145,7 +145,7 @@ "└─TableReader 8.00 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 8.00 mpp[tiflash] test.fact_t.d1_k", - " └─HashJoin 8.00 mpp[tiflash] right outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], right cond:gt(test.d1_t.value, 10)", + " └─HashJoin 8.00 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], right cond:gt(test.d1_t.value, 10)", " ├─ExchangeReceiver(Build) 8.00 mpp[tiflash] ", " │ └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 8.00 mpp[tiflash] not(isnull(test.fact_t.d1_k))", @@ -160,7 +160,7 @@ "└─TableReader 8.00 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 8.00 mpp[tiflash] test.fact_t.d1_k", - " └─HashJoin 8.00 mpp[tiflash] right outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], right cond:gt(test.d1_t.value, 10), other cond:gt(test.fact_t.col1, test.d1_t.value)", + " └─HashJoin 8.00 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], right cond:gt(test.d1_t.value, 10), other cond:gt(test.fact_t.col1, test.d1_t.value)", " ├─ExchangeReceiver(Build) 8.00 mpp[tiflash] ", " │ └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 8.00 mpp[tiflash] not(isnull(test.fact_t.col1)), not(isnull(test.fact_t.d1_k))", @@ -174,7 +174,7 @@ "StreamAgg 1.00 root funcs:count(1)->Column#12", "└─TableReader 6.40 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 6.40 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 6.40 mpp[tiflash] semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", + " └─HashJoin 6.40 mpp[tiflash] semi join, left side:Selection, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.d1_t.d1_k))", @@ -190,7 +190,7 @@ "└─TableReader 6.40 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 6.40 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 6.40 mpp[tiflash] test.fact_t.d1_k", - " └─HashJoin 6.40 mpp[tiflash] semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], other cond:gt(test.d1_t.value, test.fact_t.col1)", + " └─HashJoin 6.40 mpp[tiflash] semi join, left side:Selection, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], other cond:gt(test.d1_t.value, test.fact_t.col1)", " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.d1_t.d1_k)), not(isnull(test.d1_t.value))", @@ -226,7 +226,7 @@ "└─TableReader 6.40 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 6.40 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 6.40 mpp[tiflash] test.fact_t.d1_k", - " └─HashJoin 6.40 mpp[tiflash] semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], other cond:gt(test.d1_t.value, test.fact_t.col1)", + " └─HashJoin 6.40 mpp[tiflash] semi join, left side:Selection, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], other cond:gt(test.d1_t.value, test.fact_t.col1)", " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.d1_t.d1_k)), not(isnull(test.d1_t.value))", @@ -241,7 +241,7 @@ "StreamAgg 1.00 root funcs:count(1)->Column#12", "└─TableReader 6.40 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 6.40 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 6.40 mpp[tiflash] anti semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", + " └─HashJoin 6.40 mpp[tiflash] anti semi join, left side:TableFullScan, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 2.00 mpp[tiflash] table:d1_t keep order:false", @@ -255,7 +255,7 @@ "└─TableReader 6.40 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 6.40 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 6.40 mpp[tiflash] test.fact_t.d1_k", - " └─HashJoin 6.40 mpp[tiflash] anti semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], other cond:gt(test.d1_t.value, test.fact_t.col1)", + " └─HashJoin 6.40 mpp[tiflash] anti semi join, left side:TableFullScan, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], other cond:gt(test.d1_t.value, test.fact_t.col1)", " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 2.00 mpp[tiflash] table:d1_t keep order:false", @@ -285,7 +285,7 @@ "└─TableReader 16.00 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 16.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 16.00 mpp[tiflash] test.fact_t.d1_k", - " └─HashJoin 16.00 mpp[tiflash] CARTESIAN left outer join, other cond:gt(test.fact_t.d1_k, test.d1_t.d1_k)", + " └─HashJoin 16.00 mpp[tiflash] CARTESIAN left outer join, left side:TableFullScan, other cond:gt(test.fact_t.d1_k, test.d1_t.d1_k)", " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.d1_t.d1_k))", @@ -300,7 +300,7 @@ "└─TableReader 16.00 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 16.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 16.00 mpp[tiflash] test.fact_t.d1_k", - " └─HashJoin 16.00 mpp[tiflash] CARTESIAN right outer join, other cond:gt(test.fact_t.d1_k, test.d1_t.d1_k)", + " └─HashJoin 16.00 mpp[tiflash] CARTESIAN right outer join, left side:ExchangeReceiver, other cond:gt(test.fact_t.d1_k, test.d1_t.d1_k)", " ├─ExchangeReceiver(Build) 8.00 mpp[tiflash] ", " │ └─ExchangeSender 8.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 8.00 mpp[tiflash] not(isnull(test.fact_t.d1_k))", @@ -314,7 +314,7 @@ "StreamAgg 1.00 root funcs:count(1)->Column#11", "└─TableReader 6.40 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 6.40 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 6.40 mpp[tiflash] Null-aware anti semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", + " └─HashJoin 6.40 mpp[tiflash] Null-aware anti semi join, left side:TableFullScan, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 2.00 mpp[tiflash] table:d1_t keep order:false", @@ -333,7 +333,7 @@ "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 8000.00 mpp[tiflash] test.t.a, test.t.b", " └─Selection 8000.00 mpp[tiflash] or(gt(test.t.a, 1), Column#7)", - " └─HashJoin 10000.00 mpp[tiflash] left outer semi join, equal:[eq(test.t.a, test.t.a)]", + " └─HashJoin 10000.00 mpp[tiflash] left outer semi join, left side:TableFullScan, equal:[eq(test.t.a, test.t.a)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", @@ -348,7 +348,7 @@ "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 8000.00 mpp[tiflash] test.t.a, test.t.b", " └─Selection 8000.00 mpp[tiflash] or(gt(test.t.a, 1), Column#7)", - " └─HashJoin 10000.00 mpp[tiflash] left outer semi join, equal:[eq(test.t.a, test.t.a)], other cond:lt(test.t.b, test.t.b)", + " └─HashJoin 10000.00 mpp[tiflash] left outer semi join, left side:TableFullScan, equal:[eq(test.t.a, test.t.a)], other cond:lt(test.t.b, test.t.b)", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", @@ -363,7 +363,7 @@ "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 8000.00 mpp[tiflash] test.t.a, test.t.b", " └─Selection 8000.00 mpp[tiflash] or(gt(test.t.a, 1), Column#7)", - " └─HashJoin 10000.00 mpp[tiflash] anti left outer semi join, equal:[eq(test.t.a, test.t.a)]", + " └─HashJoin 10000.00 mpp[tiflash] anti left outer semi join, left side:TableFullScan, equal:[eq(test.t.a, test.t.a)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", @@ -378,7 +378,7 @@ "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 8000.00 mpp[tiflash] test.t.a, test.t.b", " └─Selection 8000.00 mpp[tiflash] or(gt(test.t.a, 1), Column#7)", - " └─HashJoin 10000.00 mpp[tiflash] anti left outer semi join, equal:[eq(test.t.a, test.t.a)], other cond:lt(test.t.b, test.t.b)", + " └─HashJoin 10000.00 mpp[tiflash] anti left outer semi join, left side:TableFullScan, equal:[eq(test.t.a, test.t.a)], other cond:lt(test.t.b, test.t.b)", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", @@ -393,7 +393,7 @@ "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 8000.00 mpp[tiflash] test.t.a, test.t.b", " └─Selection 8000.00 mpp[tiflash] or(gt(test.t.a, 1), Column#7)", - " └─HashJoin 10000.00 mpp[tiflash] CARTESIAN left outer semi join, other cond:eq(test.t.b, test.t.a)", + " └─HashJoin 10000.00 mpp[tiflash] CARTESIAN left outer semi join, left side:TableFullScan, other cond:eq(test.t.b, test.t.a)", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", @@ -408,7 +408,7 @@ "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 8000.00 mpp[tiflash] test.t.a, test.t.b", " └─Selection 8000.00 mpp[tiflash] or(gt(test.t.a, 1), Column#7)", - " └─HashJoin 10000.00 mpp[tiflash] CARTESIAN left outer semi join, other cond:eq(test.t.a, test.t.b), lt(test.t.b, test.t.b)", + " └─HashJoin 10000.00 mpp[tiflash] CARTESIAN left outer semi join, left side:TableFullScan, other cond:eq(test.t.a, test.t.b), lt(test.t.b, test.t.b)", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", @@ -423,7 +423,7 @@ "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 8000.00 mpp[tiflash] test.t.a, test.t.b", " └─Selection 8000.00 mpp[tiflash] or(gt(test.t.a, 1), Column#7)", - " └─HashJoin 10000.00 mpp[tiflash] Null-aware anti left outer semi join, equal:[eq(test.t.b, test.t.a)]", + " └─HashJoin 10000.00 mpp[tiflash] Null-aware anti left outer semi join, left side:TableFullScan, equal:[eq(test.t.b, test.t.a)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", @@ -438,7 +438,7 @@ "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 8000.00 mpp[tiflash] test.t.a, test.t.b", " └─Selection 8000.00 mpp[tiflash] or(gt(test.t.a, 1), Column#7)", - " └─HashJoin 10000.00 mpp[tiflash] Null-aware anti left outer semi join, equal:[eq(test.t.b, test.t.a)], other cond:lt(test.t.b, test.t.b)", + " └─HashJoin 10000.00 mpp[tiflash] Null-aware anti left outer semi join, left side:TableFullScan, equal:[eq(test.t.b, test.t.a)], other cond:lt(test.t.b, test.t.b)", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", @@ -452,11 +452,11 @@ "TableReader 10000.00 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 10000.00 mpp[tiflash] Column#13, Column#17", - " └─HashJoin 10000.00 mpp[tiflash] anti left outer semi join, equal:[eq(test.t.a, test.t.a)]", + " └─HashJoin 10000.00 mpp[tiflash] anti left outer semi join, left side:HashJoin, equal:[eq(test.t.a, test.t.a)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", - " └─HashJoin(Probe) 10000.00 mpp[tiflash] left outer semi join, equal:[eq(test.t.a, test.t.a)]", + " └─HashJoin(Probe) 10000.00 mpp[tiflash] left outer semi join, left side:TableFullScan, equal:[eq(test.t.a, test.t.a)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", @@ -470,11 +470,11 @@ "TableReader 10000.00 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 10000.00 mpp[tiflash] Column#13, Column#17", - " └─HashJoin 10000.00 mpp[tiflash] Null-aware anti left outer semi join, equal:[eq(test.t.a, test.t.b)]", + " └─HashJoin 10000.00 mpp[tiflash] Null-aware anti left outer semi join, left side:HashJoin, equal:[eq(test.t.a, test.t.b)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", - " └─HashJoin(Probe) 10000.00 mpp[tiflash] CARTESIAN left outer semi join, other cond:eq(test.t.a, test.t.b)", + " └─HashJoin(Probe) 10000.00 mpp[tiflash] CARTESIAN left outer semi join, left side:TableFullScan, other cond:eq(test.t.a, test.t.b)", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", @@ -488,11 +488,11 @@ "TableReader 10000.00 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 10000.00 mpp[tiflash] Column#13, Column#17", - " └─HashJoin 10000.00 mpp[tiflash] Null-aware anti left outer semi join, equal:[eq(test.t.b, test.t.a)]", + " └─HashJoin 10000.00 mpp[tiflash] Null-aware anti left outer semi join, left side:HashJoin, equal:[eq(test.t.b, test.t.a)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", - " └─HashJoin(Probe) 10000.00 mpp[tiflash] CARTESIAN left outer semi join, other cond:eq(test.t.b, test.t.a)", + " └─HashJoin(Probe) 10000.00 mpp[tiflash] CARTESIAN left outer semi join, left side:TableFullScan, other cond:eq(test.t.b, test.t.a)", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", @@ -506,11 +506,11 @@ "TableReader 10000.00 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 10000.00 mpp[tiflash] Column#13, Column#17", - " └─HashJoin 10000.00 mpp[tiflash] Null-aware anti left outer semi join, equal:[eq(test.t.b, test.t.b)]", + " └─HashJoin 10000.00 mpp[tiflash] Null-aware anti left outer semi join, left side:HashJoin, equal:[eq(test.t.b, test.t.b)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", - " └─HashJoin(Probe) 10000.00 mpp[tiflash] CARTESIAN left outer semi join, other cond:eq(test.t.b, test.t.b)", + " └─HashJoin(Probe) 10000.00 mpp[tiflash] CARTESIAN left outer semi join, left side:TableFullScan, other cond:eq(test.t.b, test.t.b)", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", @@ -523,35 +523,35 @@ "Plan": [ "TableReader 10000.00 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 10000.00 mpp[tiflash] Null-aware anti left outer semi join, equal:[eq(test.t.b, test.t.b)]", + " └─HashJoin 10000.00 mpp[tiflash] Null-aware anti left outer semi join, left side:HashJoin, equal:[eq(test.t.b, test.t.b)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", - " └─HashJoin(Probe) 10000.00 mpp[tiflash] Null-aware anti left outer semi join, equal:[eq(test.t.b, test.t.a)]", + " └─HashJoin(Probe) 10000.00 mpp[tiflash] Null-aware anti left outer semi join, left side:HashJoin, equal:[eq(test.t.b, test.t.a)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", - " └─HashJoin(Probe) 10000.00 mpp[tiflash] Null-aware anti left outer semi join, equal:[eq(test.t.a, test.t.b)]", + " └─HashJoin(Probe) 10000.00 mpp[tiflash] Null-aware anti left outer semi join, left side:HashJoin, equal:[eq(test.t.a, test.t.b)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", - " └─HashJoin(Probe) 10000.00 mpp[tiflash] anti left outer semi join, equal:[eq(test.t.a, test.t.a)]", + " └─HashJoin(Probe) 10000.00 mpp[tiflash] anti left outer semi join, left side:HashJoin, equal:[eq(test.t.a, test.t.a)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", - " └─HashJoin(Probe) 10000.00 mpp[tiflash] CARTESIAN left outer semi join, other cond:eq(test.t.b, test.t.b)", + " └─HashJoin(Probe) 10000.00 mpp[tiflash] CARTESIAN left outer semi join, left side:HashJoin, other cond:eq(test.t.b, test.t.b)", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", - " └─HashJoin(Probe) 10000.00 mpp[tiflash] CARTESIAN left outer semi join, other cond:eq(test.t.b, test.t.a)", + " └─HashJoin(Probe) 10000.00 mpp[tiflash] CARTESIAN left outer semi join, left side:HashJoin, other cond:eq(test.t.b, test.t.a)", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", - " └─HashJoin(Probe) 10000.00 mpp[tiflash] CARTESIAN left outer semi join, other cond:eq(test.t.a, test.t.b)", + " └─HashJoin(Probe) 10000.00 mpp[tiflash] CARTESIAN left outer semi join, left side:HashJoin, other cond:eq(test.t.a, test.t.b)", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", - " └─HashJoin(Probe) 10000.00 mpp[tiflash] left outer semi join, equal:[eq(test.t.a, test.t.a)]", + " └─HashJoin(Probe) 10000.00 mpp[tiflash] left outer semi join, left side:TableFullScan, equal:[eq(test.t.a, test.t.a)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", @@ -571,7 +571,7 @@ "└─TableReader 2.00 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 2.00 mpp[tiflash] test.a.id", - " └─HashJoin 2.00 mpp[tiflash] left outer join, equal:[eq(test.a.id, test.b.id)]", + " └─HashJoin 2.00 mpp[tiflash] left outer join, left side:TableFullScan, equal:[eq(test.a.id, test.b.id)]", " ├─ExchangeReceiver(Build) 3.00 mpp[tiflash] ", " │ └─ExchangeSender 3.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 3.00 mpp[tiflash] not(isnull(test.b.id))", @@ -586,7 +586,7 @@ "└─TableReader 2.00 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 2.00 mpp[tiflash] test.b.id", - " └─HashJoin 2.00 mpp[tiflash] right outer join, equal:[eq(test.b.id, test.a.id)]", + " └─HashJoin 2.00 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.b.id, test.a.id)]", " ├─ExchangeReceiver(Build) 3.00 mpp[tiflash] ", " │ └─ExchangeSender 3.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 3.00 mpp[tiflash] not(isnull(test.b.id))", @@ -606,7 +606,7 @@ "└─TableReader 2.00 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 2.00 mpp[tiflash] test.a.id", - " └─HashJoin 2.00 mpp[tiflash] left outer join, equal:[eq(test.a.id, test.b.id)]", + " └─HashJoin 2.00 mpp[tiflash] left outer join, left side:ExchangeReceiver, equal:[eq(test.a.id, test.b.id)]", " ├─ExchangeReceiver(Build) 3.00 mpp[tiflash] ", " │ └─ExchangeSender 3.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.b.id, collate: binary]", " │ └─Selection 3.00 mpp[tiflash] not(isnull(test.b.id))", @@ -622,7 +622,7 @@ "StreamAgg 1.00 root funcs:count(1)->Column#7", "└─TableReader 2.00 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 2.00 mpp[tiflash] right outer join, equal:[eq(test.b.id, test.a.id)]", + " └─HashJoin 2.00 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.b.id, test.a.id)]", " ├─ExchangeReceiver(Build) 3.00 mpp[tiflash] ", " │ └─ExchangeSender 3.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.b.id, collate: binary]", " │ └─Selection 3.00 mpp[tiflash] not(isnull(test.b.id))", @@ -644,7 +644,7 @@ "└─TableReader 2.00 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 2.00 mpp[tiflash] test.a.id", - " └─HashJoin 2.00 mpp[tiflash] left outer join, equal:[eq(test.a.id, test.b.id)]", + " └─HashJoin 2.00 mpp[tiflash] left outer join, left side:ExchangeReceiver, equal:[eq(test.a.id, test.b.id)]", " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.a.id, collate: binary]", " │ └─TableFullScan 2.00 mpp[tiflash] table:a keep order:false", @@ -660,7 +660,7 @@ "StreamAgg 1.00 root funcs:count(1)->Column#7", "└─TableReader 2.00 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 2.00 mpp[tiflash] right outer join, equal:[eq(test.b.id, test.a.id)]", + " └─HashJoin 2.00 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.b.id, test.a.id)]", " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.a.id, collate: binary]", " │ └─TableFullScan 2.00 mpp[tiflash] table:a keep order:false", @@ -785,7 +785,7 @@ " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#12", " └─Projection 32.00 mpp[tiflash] test.fact_t.d1_k", - " └─HashJoin 32.00 mpp[tiflash] left outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", + " └─HashJoin 32.00 mpp[tiflash] left outer join, left side:ExchangeReceiver, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", " │ └─Selection 4.00 mpp[tiflash] not(isnull(test.d1_t.d1_k))", @@ -802,7 +802,7 @@ "└─TableReader 1.00 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#12", - " └─HashJoin 32.00 mpp[tiflash] right outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", + " └─HashJoin 32.00 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", " │ └─TableFullScan 4.00 mpp[tiflash] table:d1_t keep order:false", @@ -839,7 +839,7 @@ " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#12", " └─Projection 32.00 mpp[tiflash] test.fact_t.d1_k", - " └─HashJoin 32.00 mpp[tiflash] left outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], left cond:[gt(test.fact_t.col1, 10)]", + " └─HashJoin 32.00 mpp[tiflash] left outer join, left side:ExchangeReceiver, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], left cond:[gt(test.fact_t.col1, 10)]", " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", " │ └─Selection 4.00 mpp[tiflash] not(isnull(test.d1_t.d1_k))", @@ -864,7 +864,7 @@ " └─Projection(Probe) 102.40 mpp[tiflash] test.fact_t.d1_k", " └─Selection 102.40 mpp[tiflash] gt(case(isnull(test.fact_t.col1), plus(test.fact_t.col1, 5), 10), 5)", " └─Projection 128.00 mpp[tiflash] test.fact_t.col1, test.fact_t.d1_k, test.fact_t.col1", - " └─HashJoin 128.00 mpp[tiflash] right outer join, equal:[eq(test.fact_t.d1_k, test.fact_t.d1_k)]", + " └─HashJoin 128.00 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.fact_t.d1_k, test.fact_t.d1_k)]", " ├─ExchangeReceiver(Build) 16.00 mpp[tiflash] ", " │ └─ExchangeSender 16.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.fact_t.d1_k, collate: binary]", " │ └─Selection 16.00 mpp[tiflash] not(isnull(test.fact_t.d1_k))", @@ -883,7 +883,7 @@ " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#12", " └─Projection 32.00 mpp[tiflash] test.fact_t.d1_k", - " └─HashJoin 32.00 mpp[tiflash] left outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], left cond:[gt(test.fact_t.col2, 10)], other cond:gt(test.fact_t.col1, test.d1_t.value)", + " └─HashJoin 32.00 mpp[tiflash] left outer join, left side:ExchangeReceiver, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], left cond:[gt(test.fact_t.col2, 10)], other cond:gt(test.fact_t.col1, test.d1_t.value)", " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", " │ └─Selection 4.00 mpp[tiflash] not(isnull(test.d1_t.d1_k)), not(isnull(test.d1_t.value))", @@ -901,7 +901,7 @@ " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#12", " └─Projection 32.00 mpp[tiflash] test.fact_t.d1_k, test.d1_t.d1_k", - " └─HashJoin 32.00 mpp[tiflash] right outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], right cond:gt(test.d1_t.value, 10)", + " └─HashJoin 32.00 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], right cond:gt(test.d1_t.value, 10)", " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", " │ └─TableFullScan 4.00 mpp[tiflash] table:d1_t keep order:false", @@ -919,7 +919,7 @@ " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#12", " └─Projection 32.00 mpp[tiflash] test.fact_t.d1_k, test.d1_t.d1_k", - " └─HashJoin 32.00 mpp[tiflash] right outer join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], right cond:gt(test.d1_t.value, 10), other cond:gt(test.fact_t.col1, test.d1_t.value)", + " └─HashJoin 32.00 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], right cond:gt(test.d1_t.value, 10), other cond:gt(test.fact_t.col1, test.d1_t.value)", " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", " │ └─TableFullScan 4.00 mpp[tiflash] table:d1_t keep order:false", @@ -935,7 +935,7 @@ "StreamAgg 1.00 root funcs:count(1)->Column#12", "└─TableReader 12.80 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 12.80 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12.80 mpp[tiflash] semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", + " └─HashJoin 12.80 mpp[tiflash] semi join, left side:ExchangeReceiver, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", " │ └─Selection 4.00 mpp[tiflash] not(isnull(test.d1_t.d1_k))", @@ -953,7 +953,7 @@ "└─TableReader 12.80 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 12.80 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 12.80 mpp[tiflash] test.fact_t.d1_k", - " └─HashJoin 12.80 mpp[tiflash] semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], other cond:gt(test.d1_t.value, test.fact_t.col1)", + " └─HashJoin 12.80 mpp[tiflash] semi join, left side:ExchangeReceiver, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], other cond:gt(test.d1_t.value, test.fact_t.col1)", " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", " │ └─Selection 4.00 mpp[tiflash] not(isnull(test.d1_t.d1_k)), not(isnull(test.d1_t.value))", @@ -970,7 +970,7 @@ "StreamAgg 1.00 root funcs:count(1)->Column#12", "└─TableReader 12.80 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 12.80 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12.80 mpp[tiflash] anti semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", + " └─HashJoin 12.80 mpp[tiflash] anti semi join, left side:ExchangeReceiver, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)]", " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", " │ └─TableFullScan 4.00 mpp[tiflash] table:d1_t keep order:false", @@ -986,7 +986,7 @@ "└─TableReader 12.80 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 12.80 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 12.80 mpp[tiflash] test.fact_t.d1_k", - " └─HashJoin 12.80 mpp[tiflash] anti semi join, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], other cond:gt(test.d1_t.value, test.fact_t.col1)", + " └─HashJoin 12.80 mpp[tiflash] anti semi join, left side:ExchangeReceiver, equal:[eq(test.fact_t.d1_k, test.d1_t.d1_k)], other cond:gt(test.d1_t.value, test.fact_t.col1)", " ├─ExchangeReceiver(Build) 4.00 mpp[tiflash] ", " │ └─ExchangeSender 4.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.d1_t.d1_k, collate: binary]", " │ └─TableFullScan 4.00 mpp[tiflash] table:d1_t keep order:false", @@ -1007,14 +1007,14 @@ "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 1.00 mpp[tiflash] Column#13", " └─Projection 1.00 mpp[tiflash] Column#13, Column#23, Column#24", - " └─HashJoin 1.00 mpp[tiflash] left outer join, equal:[eq(test.t3.v1, test.t1.v1) eq(test.t3.v2, test.t1.v2)]", + " └─HashJoin 1.00 mpp[tiflash] left outer join, left side:ExchangeReceiver, equal:[eq(test.t3.v1, test.t1.v1) eq(test.t3.v2, test.t1.v2)]", " ├─ExchangeReceiver(Build) 1.00 mpp[tiflash] ", " │ └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: Column#23, collate: binary], [name: Column#24, collate: binary]", " │ └─Projection 1.00 mpp[tiflash] test.t3.v1, test.t3.v2, cast(test.t3.v1, decimal(20,2))->Column#23, cast(test.t3.v2, decimal(20,2))->Column#24", " │ └─TableFullScan 1.00 mpp[tiflash] table:a keep order:false", " └─Projection(Probe) 2.00 mpp[tiflash] test.t1.v1, test.t1.v2, plus(test.t1.v1, test.t1.v2)->Column#13", " └─Projection 2.00 mpp[tiflash] test.t1.v1, test.t1.v2", - " └─HashJoin 2.00 mpp[tiflash] left outer join, equal:[eq(test.t1.v1, test.t2.v1) eq(test.t1.v2, test.t2.v2)]", + " └─HashJoin 2.00 mpp[tiflash] left outer join, left side:ExchangeReceiver, equal:[eq(test.t1.v1, test.t2.v1) eq(test.t1.v2, test.t2.v2)]", " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.v1, collate: binary], [name: test.t1.v2, collate: binary]", " │ └─Selection 2.00 mpp[tiflash] not(isnull(test.t1.v1)), not(isnull(test.t1.v2))", @@ -1037,7 +1037,7 @@ " └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t2.v1, collate: binary], [name: test.t2.v2, collate: binary]", " └─HashAgg 2.00 mpp[tiflash] group by:test.t2.v1, test.t2.v2, funcs:count(1)->Column#22", " └─Projection 2.00 mpp[tiflash] test.t2.v1, test.t2.v2, test.t1.v1, test.t1.v2", - " └─HashJoin 2.00 mpp[tiflash] left outer join, equal:[eq(test.t1.v1, test.t2.v1) eq(test.t1.v2, test.t2.v2)]", + " └─HashJoin 2.00 mpp[tiflash] left outer join, left side:ExchangeReceiver, equal:[eq(test.t1.v1, test.t2.v1) eq(test.t1.v2, test.t2.v2)]", " ├─ExchangeReceiver(Build) 2.00 mpp[tiflash] ", " │ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.v1, collate: binary], [name: test.t1.v2, collate: binary]", " │ └─TableFullScan 2.00 mpp[tiflash] table:t1 keep order:false", @@ -1058,7 +1058,7 @@ " └─ExchangeReceiver 1.00 mpp[tiflash] ", " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t2.v1, collate: binary], [name: test.t2.v2, collate: binary]", " └─Projection 1.00 mpp[tiflash] test.t2.v1, test.t2.v2, test.t3.v1, test.t3.v2", - " └─HashJoin 1.00 mpp[tiflash] left outer join, equal:[eq(test.t3.v1, test.t2.v1) eq(test.t3.v2, test.t2.v2)]", + " └─HashJoin 1.00 mpp[tiflash] left outer join, left side:ExchangeReceiver, equal:[eq(test.t3.v1, test.t2.v1) eq(test.t3.v2, test.t2.v2)]", " ├─ExchangeReceiver(Build) 1.00 mpp[tiflash] ", " │ └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t3.v1, collate: binary], [name: test.t3.v2, collate: binary]", " │ └─TableFullScan 1.00 mpp[tiflash] table:t3 keep order:false", @@ -1088,7 +1088,7 @@ { "SQL": "explain format = 'brief' select * from table_1 a left join table_1 b on a.id = b.id and dayofmonth(a.datetime_col) > 100", "Plan": [ - "HashJoin 2.00 root left outer join, equal:[eq(test.table_1.id, test.table_1.id)], left cond:[gt(dayofmonth(test.table_1.datetime_col), 100)]", + "HashJoin 2.00 root left outer join, left side:TableReader, equal:[eq(test.table_1.id, test.table_1.id)], left cond:[gt(dayofmonth(test.table_1.datetime_col), 100)]", "├─TableReader(Build) 2.00 root MppVersion: 2, data:ExchangeSender", "│ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", "│ └─TableFullScan 2.00 mpp[tiflash] table:b keep order:false", @@ -1100,7 +1100,7 @@ { "SQL": "explain format = 'brief' select * from table_1 a right join table_1 b on a.id = b.id and dayofmonth(b.datetime_col) > 100", "Plan": [ - "HashJoin 2.00 root right outer join, equal:[eq(test.table_1.id, test.table_1.id)], right cond:gt(dayofmonth(test.table_1.datetime_col), 100)", + "HashJoin 2.00 root right outer join, left side:TableReader, equal:[eq(test.table_1.id, test.table_1.id)], right cond:gt(dayofmonth(test.table_1.datetime_col), 100)", "├─TableReader(Build) 2.00 root MppVersion: 2, data:ExchangeSender", "│ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", "│ └─TableFullScan 2.00 mpp[tiflash] table:a keep order:false", @@ -1382,7 +1382,7 @@ "Plan": [ "TableReader 10000.00 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 10000.00 mpp[tiflash] left outer join, equal:[eq(test.t.id, Column#9)]", + " └─HashJoin 10000.00 mpp[tiflash] left outer join, left side:TableFullScan, equal:[eq(test.t.id, Column#9)]", " ├─ExchangeReceiver(Build) 8000.00 mpp[tiflash] ", " │ └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Projection 8000.00 mpp[tiflash] minus(test.t.id, 2)->Column#9", @@ -1396,7 +1396,7 @@ "Plan": [ "TableReader 12487.50 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12487.50 mpp[tiflash] right outer join, equal:[eq(test.t.id, Column#9)]", + " └─HashJoin 12487.50 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.t.id, Column#9)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", @@ -1427,7 +1427,7 @@ "Plan": [ "TableReader 7992.00 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 7992.00 mpp[tiflash] semi join, equal:[eq(test.t.id, test.t.id)]", + " └─HashJoin 7992.00 mpp[tiflash] semi join, left side:Selection, equal:[eq(test.t.id, test.t.id)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", @@ -1441,7 +1441,7 @@ "Plan": [ "TableReader 8000.00 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 8000.00 mpp[tiflash] anti semi join, equal:[eq(test.t.id, test.t.id)]", + " └─HashJoin 8000.00 mpp[tiflash] anti semi join, left side:TableFullScan, equal:[eq(test.t.id, test.t.id)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", @@ -1688,7 +1688,7 @@ "TableReader 7984.01 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 7984.01 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 7984.01 mpp[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5", - " └─HashJoin 7984.01 mpp[tiflash] semi join, equal:[eq(test.t.c1, test.t.c2) eq(test.t.c2, test.t.c3) eq(test.t.c3, test.t.c1) eq(test.t.c4, test.t.c3) eq(test.t.c1, test.t.c5)]", + " └─HashJoin 7984.01 mpp[tiflash] semi join, left side:ExchangeReceiver, equal:[eq(test.t.c1, test.t.c2) eq(test.t.c2, test.t.c3) eq(test.t.c3, test.t.c1) eq(test.t.c4, test.t.c3) eq(test.t.c1, test.t.c5)]", " ├─ExchangeReceiver(Build) 9970.03 mpp[tiflash] ", " │ └─ExchangeSender 9970.03 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t.c2, collate: binary], [name: Column#19, collate: binary], [name: Column#21, collate: binary], [name: test.t.c3, collate: binary], [name: test.t.c5, collate: binary]", " │ └─Projection 9970.03 mpp[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c5, cast(test.t.c3, decimal(10,5))->Column#19, cast(test.t.c1, decimal(10,5))->Column#21", @@ -1707,7 +1707,7 @@ "TableReader 19492.21 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 19492.21 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 19492.21 mpp[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5", - " └─HashJoin 19492.21 mpp[tiflash] right outer join, equal:[eq(test.t.c3, test.t.c4)]", + " └─HashJoin 19492.21 mpp[tiflash] right outer join, left side:Projection, equal:[eq(test.t.c3, test.t.c4)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: Column#29, collate: binary]", " │ └─Projection 10000.00 mpp[tiflash] test.t.c1, test.t.c2, test.t.c3, test.t.c4, test.t.c5, cast(test.t.c4, decimal(40,20))->Column#29", @@ -1769,7 +1769,7 @@ "Plan": [ "TableReader 7992.00 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 7992.00 mpp[tiflash] semi join, equal:[eq(test.tt.b1, test.t.c3)]", + " └─HashJoin 7992.00 mpp[tiflash] semi join, left side:ExchangeReceiver, equal:[eq(test.tt.b1, test.t.c3)]", " ├─ExchangeReceiver(Build) 8000.00 mpp[tiflash] ", " │ └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t.c3, collate: binary]", " │ └─Projection 8000.00 mpp[tiflash] test.t.c3", @@ -1791,7 +1791,7 @@ "Plan": [ "TableReader 7992.00 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 7992.00 mpp[tiflash] semi join, equal:[eq(test.tt.b1, test.t.c3)], stream_count: 8", + " └─HashJoin 7992.00 mpp[tiflash] semi join, left side:ExchangeReceiver, equal:[eq(test.tt.b1, test.t.c3)], stream_count: 8", " ├─ExchangeReceiver(Build) 8000.00 mpp[tiflash] stream_count: 8", " │ └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t.c3, collate: binary], stream_count: 8", " │ └─Projection 8000.00 mpp[tiflash] test.t.c3", @@ -2219,7 +2219,7 @@ " └─HashAgg 6400.00 mpp[tiflash] group by:test.t.id, funcs:sum(test.t.value)->Column#8", " └─Selection 8000.00 mpp[tiflash] gt(plus(test.t.id, 1), ifnull(Column#7, 0))", " └─Projection 10000.00 mpp[tiflash] test.t.id, test.t.value, Column#7", - " └─HashJoin 10000.00 mpp[tiflash] left outer join, equal:[eq(test.t.id, test.t.id) eq(test.t.value, test.t.value)]", + " └─HashJoin 10000.00 mpp[tiflash] left outer join, left side:ExchangeReceiver, equal:[eq(test.t.id, test.t.id) eq(test.t.value, test.t.value)]", " ├─Projection(Build) 7984.01 mpp[tiflash] Column#7, test.t.id, test.t.value", " │ └─HashAgg 7984.01 mpp[tiflash] group by:test.t.id, test.t.value, funcs:sum(Column#24)->Column#7, funcs:firstrow(test.t.id)->test.t.id, funcs:firstrow(test.t.value)->test.t.value", " │ └─ExchangeReceiver 7984.01 mpp[tiflash] ", diff --git a/pkg/planner/core/casetest/physicalplantest/testdata/plan_suite_out.json b/pkg/planner/core/casetest/physicalplantest/testdata/plan_suite_out.json index 8ab9807f5a..b9ac585053 100644 --- a/pkg/planner/core/casetest/physicalplantest/testdata/plan_suite_out.json +++ b/pkg/planner/core/casetest/physicalplantest/testdata/plan_suite_out.json @@ -872,7 +872,7 @@ "Plan": [ "TableReader 12487.50 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12487.50 mpp[tiflash] left outer join, equal:[eq(test.t.a, test.t.a)]", + " └─HashJoin 12487.50 mpp[tiflash] left outer join, left side:TableFullScan, equal:[eq(test.t.a, test.t.a)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.a))", @@ -886,7 +886,7 @@ "Plan": [ "TableReader 12487.50 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12487.50 mpp[tiflash] left outer join, equal:[eq(test.t.a, test.t.a)]", + " └─HashJoin 12487.50 mpp[tiflash] left outer join, left side:TableFullScan, equal:[eq(test.t.a, test.t.a)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.a))", @@ -902,7 +902,7 @@ "Plan": [ "TableReader 12487.50 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12487.50 mpp[tiflash] right outer join, equal:[eq(test.t.a, test.t.a)]", + " └─HashJoin 12487.50 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.t.a, test.t.a)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.a))", @@ -916,7 +916,7 @@ "Plan": [ "TableReader 12487.50 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12487.50 mpp[tiflash] left outer join, equal:[eq(test.t.a, test.t.a)]", + " └─HashJoin 12487.50 mpp[tiflash] left outer join, left side:TableFullScan, equal:[eq(test.t.a, test.t.a)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.a))", @@ -933,7 +933,7 @@ "Plan": [ "TableReader 12487.50 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12487.50 mpp[tiflash] right outer join, equal:[eq(test.t.a, test.t.a)]", + " └─HashJoin 12487.50 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.t.a, test.t.a)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.a))", @@ -955,7 +955,7 @@ "Plan": [ "TableReader 12487.50 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12487.50 mpp[tiflash] left outer join, equal:[eq(test.t.a, test.t.a)]", + " └─HashJoin 12487.50 mpp[tiflash] left outer join, left side:ExchangeReceiver, equal:[eq(test.t.a, test.t.a)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t.a, collate: binary]", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.a))", @@ -971,7 +971,7 @@ "Plan": [ "TableReader 12487.50 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12487.50 mpp[tiflash] right outer join, equal:[eq(test.t.a, test.t.a)]", + " └─HashJoin 12487.50 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.t.a, test.t.a)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t.a, collate: binary]", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.a))", @@ -987,7 +987,7 @@ "Plan": [ "TableReader 12487.50 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12487.50 mpp[tiflash] left outer join, equal:[eq(test.t.a, test.t.a)]", + " └─HashJoin 12487.50 mpp[tiflash] left outer join, left side:ExchangeReceiver, equal:[eq(test.t.a, test.t.a)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t.a, collate: binary]", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t1 keep order:false, stats:pseudo", @@ -1003,7 +1003,7 @@ "Plan": [ "TableReader 12487.50 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12487.50 mpp[tiflash] right outer join, equal:[eq(test.t.a, test.t.a)]", + " └─HashJoin 12487.50 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.t.a, test.t.a)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t.a, collate: binary]", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t2 keep order:false, stats:pseudo", @@ -1024,7 +1024,7 @@ "Plan": [ "TableReader 12487.50 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12487.50 mpp[tiflash] left outer join, equal:[eq(test.t.a, test.t.a)]", + " └─HashJoin 12487.50 mpp[tiflash] left outer join, left side:ExchangeReceiver, equal:[eq(test.t.a, test.t.a)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t.a, collate: binary]", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.a))", @@ -1040,7 +1040,7 @@ "Plan": [ "TableReader 12487.50 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12487.50 mpp[tiflash] right outer join, equal:[eq(test.t.a, test.t.a)]", + " └─HashJoin 12487.50 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.t.a, test.t.a)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t.a, collate: binary]", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.a))", @@ -1056,7 +1056,7 @@ "Plan": [ "TableReader 12487.50 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12487.50 mpp[tiflash] left outer join, equal:[eq(test.t.a, test.t.a)]", + " └─HashJoin 12487.50 mpp[tiflash] left outer join, left side:ExchangeReceiver, equal:[eq(test.t.a, test.t.a)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t.a, collate: binary]", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t1 keep order:false, stats:pseudo", @@ -1072,7 +1072,7 @@ "Plan": [ "TableReader 12487.50 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 12487.50 mpp[tiflash] right outer join, equal:[eq(test.t.a, test.t.a)]", + " └─HashJoin 12487.50 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.t.a, test.t.a)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t.a, collate: binary]", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t2 keep order:false, stats:pseudo", @@ -1090,7 +1090,7 @@ "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 8000.00 mpp[tiflash] test.t.a", " └─Selection 8000.00 mpp[tiflash] or(gt(test.t.a, 1), Column#9)", - " └─HashJoin 10000.00 mpp[tiflash] CARTESIAN left outer semi join, other cond:eq(test.t.a, test.t.a)", + " └─HashJoin 10000.00 mpp[tiflash] CARTESIAN left outer semi join, left side:TableFullScan, other cond:eq(test.t.a, test.t.a)", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t2 keep order:false, stats:pseudo", @@ -1107,7 +1107,7 @@ "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 8000.00 mpp[tiflash] test.t.a", " └─Selection 8000.00 mpp[tiflash] or(gt(test.t.a, 1), Column#9)", - " └─HashJoin 10000.00 mpp[tiflash] Null-aware anti left outer semi join, equal:[eq(test.t.a, test.t.a)]", + " └─HashJoin 10000.00 mpp[tiflash] Null-aware anti left outer semi join, left side:TableFullScan, equal:[eq(test.t.a, test.t.a)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t2 keep order:false, stats:pseudo", @@ -1126,7 +1126,7 @@ "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 8000.00 mpp[tiflash] test.t.a", " └─Selection 8000.00 mpp[tiflash] or(gt(test.t.a, 1), Column#9)", - " └─HashJoin 10000.00 mpp[tiflash] CARTESIAN left outer semi join, other cond:eq(test.t.a, test.t.a)", + " └─HashJoin 10000.00 mpp[tiflash] CARTESIAN left outer semi join, left side:TableFullScan, other cond:eq(test.t.a, test.t.a)", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t2 keep order:false, stats:pseudo", @@ -1145,7 +1145,7 @@ "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 8000.00 mpp[tiflash] test.t.a", " └─Selection 8000.00 mpp[tiflash] or(gt(test.t.a, 1), Column#9)", - " └─HashJoin 10000.00 mpp[tiflash] Null-aware anti left outer semi join, equal:[eq(test.t.a, test.t.a)]", + " └─HashJoin 10000.00 mpp[tiflash] Null-aware anti left outer semi join, left side:TableFullScan, equal:[eq(test.t.a, test.t.a)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t2 keep order:false, stats:pseudo", @@ -1579,7 +1579,7 @@ "Plan": [ "TableReader_36 0.80 root MppVersion: 2, data:ExchangeSender_35", "└─ExchangeSender_35 0.80 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin_34 0.80 mpp[tiflash] semi join, equal:[eq(test.t1.a, test.t2.b)]", + " └─HashJoin_34 0.80 mpp[tiflash] semi join, left side:Selection_13, equal:[eq(test.t1.a, test.t2.b)]", " ├─ExchangeReceiver_17(Build) 8.00 mpp[tiflash] ", " │ └─ExchangeSender_16 8.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection_15 8.00 mpp[tiflash] not(isnull(test.t2.b))", @@ -1609,7 +1609,7 @@ "Plan": [ "TableReader_38 0.80 root MppVersion: 2, data:ExchangeSender_37", "└─ExchangeSender_37 0.80 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin_36 0.80 mpp[tiflash] semi join, equal:[eq(test.t1.a, test.t2.b)]", + " └─HashJoin_36 0.80 mpp[tiflash] semi join, left side:ExchangeReceiver_15, equal:[eq(test.t1.a, test.t2.b)]", " ├─ExchangeReceiver_15(Build) 1.00 mpp[tiflash] ", " │ └─ExchangeSender_14 1.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.a, collate: binary]", " │ └─Selection_13 1.00 mpp[tiflash] not(isnull(test.t1.a))", @@ -1636,7 +1636,7 @@ "Plan": [ "TableReader_32 3.00 root MppVersion: 2, data:ExchangeSender_31", "└─ExchangeSender_31 3.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin_30 3.00 mpp[tiflash] right outer join, equal:[eq(test.t1.a, test.t2.b)], other cond:lt(test.t1.c, test.t2.d)", + " └─HashJoin_30 3.00 mpp[tiflash] right outer join, left side:ExchangeReceiver_14, equal:[eq(test.t1.a, test.t2.b)], other cond:lt(test.t1.c, test.t2.d)", " ├─ExchangeReceiver_14(Build) 5.00 mpp[tiflash] ", " │ └─ExchangeSender_13 5.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection_12 5.00 mpp[tiflash] not(isnull(test.t1.a)), not(isnull(test.t1.c))", @@ -1665,7 +1665,7 @@ "Plan": [ "TableReader_34 3.00 root MppVersion: 2, data:ExchangeSender_33", "└─ExchangeSender_33 3.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin_32 3.00 mpp[tiflash] right outer join, equal:[eq(test.t1.a, test.t2.b)], other cond:lt(test.t1.c, test.t2.d)", + " └─HashJoin_32 3.00 mpp[tiflash] right outer join, left side:ExchangeReceiver_14, equal:[eq(test.t1.a, test.t2.b)], other cond:lt(test.t1.c, test.t2.d)", " ├─ExchangeReceiver_17(Build) 3.00 mpp[tiflash] ", " │ └─ExchangeSender_16 3.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t2.b, collate: binary]", " │ └─TableFullScan_15 3.00 mpp[tiflash] table:t2 keep order:false", @@ -1684,7 +1684,7 @@ { "SQL": "select /*+ inl_join(t1@sel_2) */ a, (select b from t1 where t1.a = t2.b) from t2;", "Plan": [ - "IndexJoin 12500.00 root left outer join, inner:TableReader, outer key:test.t2.b, inner key:test.t1.a, equal cond:eq(test.t2.b, test.t1.a)", + "IndexJoin 12500.00 root left outer join, inner:TableReader, left side:TableReader, outer key:test.t2.b, inner key:test.t1.a, equal cond:eq(test.t2.b, test.t1.a)", "├─TableReader(Build) 10000.00 root data:TableFullScan", "│ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", "└─TableReader(Probe) 10000.00 root data:TableRangeScan", @@ -1695,7 +1695,7 @@ { "SQL": "select /*+ inl_join(t2) */ a, (select b from t1 where t1.a = t2.b) from t2;", "Plan": [ - "HashJoin 12500.00 root left outer join, equal:[eq(test.t2.b, test.t1.a)]", + "HashJoin 12500.00 root left outer join, left side:TableReader, equal:[eq(test.t2.b, test.t1.a)]", "├─TableReader(Build) 10000.00 root data:TableFullScan", "│ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", "└─TableReader(Probe) 10000.00 root data:TableFullScan", @@ -3230,7 +3230,7 @@ { "SQL": "select exists(select /*+ SEMI_JOIN_REWRITE() */ * from t t1 where t1.a=t.a) from t", "Plan": [ - "HashJoin 10000.00 root left outer semi join, equal:[eq(test.t.a, test.t.a)]", + "HashJoin 10000.00 root left outer semi join, left side:TableReader, equal:[eq(test.t.a, test.t.a)]", "├─TableReader(Build) 10000.00 root data:TableFullScan", "│ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", "└─TableReader(Probe) 10000.00 root data:TableFullScan", @@ -3241,7 +3241,7 @@ { "SQL": "select * from t where exists (select /*+ SEMI_JOIN_REWRITE() */ 1 from t t1 where t1.a > t.a)", "Plan": [ - "HashJoin 7992.00 root CARTESIAN semi join, other cond:gt(test.t.a, test.t.a)", + "HashJoin 7992.00 root CARTESIAN semi join, left side:TableReader, other cond:gt(test.t.a, test.t.a)", "├─TableReader(Build) 9990.00 root data:Selection", "│ └─Selection 9990.00 cop[tikv] not(isnull(test.t.a))", "│ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", diff --git a/pkg/planner/core/casetest/pushdown/testdata/integration_suite_out.json b/pkg/planner/core/casetest/pushdown/testdata/integration_suite_out.json index 84e405f6aa..822a8948b9 100644 --- a/pkg/planner/core/casetest/pushdown/testdata/integration_suite_out.json +++ b/pkg/planner/core/casetest/pushdown/testdata/integration_suite_out.json @@ -187,7 +187,7 @@ { "SQL": "desc format = 'brief' select * from t left join (select id-2 as b from t) A on A.b=t.id", "Plan": [ - "HashJoin 10000.00 root left outer join, equal:[eq(test.t.id, Column#25)]", + "HashJoin 10000.00 root left outer join, left side:TableReader, equal:[eq(test.t.id, Column#25)]", "├─TableReader(Build) 8000.00 root MppVersion: 2, data:ExchangeSender", "│ └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", "│ └─Projection 8000.00 mpp[tiflash] minus(test.t.id, 2)->Column#25", @@ -201,7 +201,7 @@ { "SQL": "desc format = 'brief' select * from t right join (select id-2 as b from t) A on A.b=t.id", "Plan": [ - "HashJoin 12487.50 root right outer join, equal:[eq(test.t.id, Column#25)]", + "HashJoin 12487.50 root right outer join, left side:TableReader, equal:[eq(test.t.id, Column#25)]", "├─TableReader(Build) 10000.00 root MppVersion: 2, data:ExchangeSender", "│ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: PassThrough", "│ └─Projection 10000.00 mpp[tiflash] minus(test.t.id, 2)->Column#25", @@ -234,7 +234,7 @@ "Plan": [ "TableReader 7992.00 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 7992.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 7992.00 mpp[tiflash] semi join, equal:[eq(test.t.id, test.t.id)]", + " └─HashJoin 7992.00 mpp[tiflash] semi join, left side:Selection, equal:[eq(test.t.id, test.t.id)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t.id))", @@ -248,7 +248,7 @@ "Plan": [ "TableReader 8000.00 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 8000.00 mpp[tiflash] anti semi join, equal:[eq(test.t.id, test.t.id)]", + " └─HashJoin 8000.00 mpp[tiflash] anti semi join, left side:TableFullScan, equal:[eq(test.t.id, test.t.id)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t keep order:false, stats:pseudo", @@ -357,7 +357,7 @@ { "SQL": "desc format = 'brief' select * from t left join (select id-2 as b from t) A on A.b=t.id", "Plan": [ - "HashJoin 10000.00 root left outer join, equal:[eq(test.t.id, Column#9)]", + "HashJoin 10000.00 root left outer join, left side:TableReader, equal:[eq(test.t.id, Column#9)]", "├─Projection(Build) 8000.00 root minus(test.t.id, 2)->Column#9", "│ └─TableReader 8000.00 root data:Selection", "│ └─Selection 8000.00 cop[tiflash] not(isnull(minus(test.t.id, 2)))", @@ -369,7 +369,7 @@ { "SQL": "desc format = 'brief' select * from t right join (select id-2 as b from t) A on A.b=t.id", "Plan": [ - "HashJoin 12487.50 root right outer join, equal:[eq(test.t.id, Column#9)]", + "HashJoin 12487.50 root right outer join, left side:TableReader, equal:[eq(test.t.id, Column#9)]", "├─Projection(Build) 10000.00 root minus(test.t.id, 2)->Column#9", "│ └─TableReader 10000.00 root data:TableFullScan", "│ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", @@ -396,7 +396,7 @@ { "SQL": "desc format = 'brief' select A.id from t as A where exists (select 1 from t where t.id=A.id)", "Plan": [ - "HashJoin 7992.00 root semi join, equal:[eq(test.t.id, test.t.id)]", + "HashJoin 7992.00 root semi join, left side:TableReader, equal:[eq(test.t.id, test.t.id)]", "├─TableReader(Build) 9990.00 root data:Selection", "│ └─Selection 9990.00 cop[tiflash] not(isnull(test.t.id))", "│ └─TableFullScan 10000.00 cop[tiflash] table:t pushed down filter:empty, keep order:false, stats:pseudo", @@ -408,7 +408,7 @@ { "SQL": "desc format = 'brief' select A.id from t as A where not exists (select 1 from t where t.id=A.id)", "Plan": [ - "HashJoin 8000.00 root anti semi join, equal:[eq(test.t.id, test.t.id)]", + "HashJoin 8000.00 root anti semi join, left side:TableReader, equal:[eq(test.t.id, test.t.id)]", "├─TableReader(Build) 10000.00 root data:TableFullScan", "│ └─TableFullScan 10000.00 cop[tiflash] table:t keep order:false, stats:pseudo", "└─TableReader(Probe) 10000.00 root data:TableFullScan", @@ -488,7 +488,7 @@ { "SQL": "explain format = 'brief' select * from table_1 a left join table_1 b on a.id = b.id and dayofmonth(a.datetime_col) > 100", "Plan": [ - "HashJoin 2.00 root left outer join, equal:[eq(test.table_1.id, test.table_1.id)], left cond:[gt(dayofmonth(test.table_1.datetime_col), 100)]", + "HashJoin 2.00 root left outer join, left side:TableReader, equal:[eq(test.table_1.id, test.table_1.id)], left cond:[gt(dayofmonth(test.table_1.datetime_col), 100)]", "├─TableReader(Build) 2.00 root MppVersion: 2, data:ExchangeSender", "│ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", "│ └─TableFullScan 2.00 mpp[tiflash] table:b keep order:false", @@ -500,7 +500,7 @@ { "SQL": "explain format = 'brief' select * from table_1 a right join table_1 b on a.id = b.id and dayofmonth(b.datetime_col) > 100", "Plan": [ - "HashJoin 2.00 root right outer join, equal:[eq(test.table_1.id, test.table_1.id)], right cond:gt(dayofmonth(test.table_1.datetime_col), 100)", + "HashJoin 2.00 root right outer join, left side:TableReader, equal:[eq(test.table_1.id, test.table_1.id)], right cond:gt(dayofmonth(test.table_1.datetime_col), 100)", "├─TableReader(Build) 2.00 root MppVersion: 2, data:ExchangeSender", "│ └─ExchangeSender 2.00 mpp[tiflash] ExchangeType: PassThrough", "│ └─TableFullScan 2.00 mpp[tiflash] table:a keep order:false", diff --git a/pkg/planner/core/casetest/rule/testdata/join_reorder_suite_out.json b/pkg/planner/core/casetest/rule/testdata/join_reorder_suite_out.json index 8d708b18dc..8e5f643824 100644 --- a/pkg/planner/core/casetest/rule/testdata/join_reorder_suite_out.json +++ b/pkg/planner/core/casetest/rule/testdata/join_reorder_suite_out.json @@ -96,7 +96,7 @@ " ├─TableReader(Build) 9990.00 root partition:all data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t2.b))", " │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", - " └─HashJoin(Probe) 15593.77 root left outer join, equal:[eq(test.t.a, test.t1.a)]", + " └─HashJoin(Probe) 15593.77 root left outer join, left side:HashJoin, equal:[eq(test.t.a, test.t1.a)]", " ├─TableReader(Build) 9990.00 root partition:all data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t1.a))", " │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", @@ -116,7 +116,7 @@ "SQL": "select /*+ leading(t2, t3) */ * from t4 join t on t4.a=t.a left join t1 on t.a = t1.a join t2 on t.b = t2.b join t3 on t2.b=t3.b;", "Plan": [ "Projection 24365.26 root test.t4.a, test.t4.b, test.t.a, test.t.b, test.t1.a, test.t1.b, test.t2.a, test.t2.b, test.t3.a, test.t3.b", - "└─HashJoin 24365.26 root left outer join, equal:[eq(test.t.a, test.t1.a)]", + "└─HashJoin 24365.26 root left outer join, left side:HashJoin, equal:[eq(test.t.a, test.t1.a)]", " ├─TableReader(Build) 9990.00 root partition:all data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t1.a))", " │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", @@ -150,7 +150,7 @@ " ├─TableReader(Build) 9990.00 root partition:all data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t2.b))", " │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", - " └─HashJoin(Probe) 15593.77 root left outer join, equal:[eq(test.t.a, test.t1.a)]", + " └─HashJoin(Probe) 15593.77 root left outer join, left side:HashJoin, equal:[eq(test.t.a, test.t1.a)]", " ├─TableReader(Build) 9990.00 root partition:all data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t1.a))", " │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", @@ -178,7 +178,7 @@ " ├─TableReader(Build) 9990.00 root partition:all data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t2.b))", " │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", - " └─HashJoin(Probe) 15593.77 root left outer join, equal:[eq(test.t.a, test.t1.a)]", + " └─HashJoin(Probe) 15593.77 root left outer join, left side:HashJoin, equal:[eq(test.t.a, test.t1.a)]", " ├─TableReader(Build) 9990.00 root partition:all data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t1.a))", " │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", @@ -198,7 +198,7 @@ "SQL": "select /*+ leading(t3, t2, t) */ * from t4 join t on t4.a=t.a left join t1 on t.a = t1.a join t2 on t.b = t2.b join t3 on t2.b=t3.b;", "Plan": [ "Projection 24365.26 root test.t4.a, test.t4.b, test.t.a, test.t.b, test.t1.a, test.t1.b, test.t2.a, test.t2.b, test.t3.a, test.t3.b", - "└─HashJoin 24365.26 root left outer join, equal:[eq(test.t.a, test.t1.a)]", + "└─HashJoin 24365.26 root left outer join, left side:HashJoin, equal:[eq(test.t.a, test.t1.a)]", " ├─TableReader(Build) 9990.00 root partition:all data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t1.a))", " │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", @@ -223,10 +223,10 @@ { "SQL": "select /*+ leading(t3) */ * from t2 left join (t1 left join t3 on t1.a=t3.a) on t2.b=t1.b;", "Plan": [ - "HashJoin 15609.38 root left outer join, equal:[eq(test.t2.b, test.t1.b)]", + "HashJoin 15609.38 root left outer join, left side:TableReader, equal:[eq(test.t2.b, test.t1.b)]", "├─TableReader(Build) 10000.00 root partition:all data:TableFullScan", "│ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", - "└─HashJoin(Probe) 12487.50 root left outer join, equal:[eq(test.t1.a, test.t3.a)]", + "└─HashJoin(Probe) 12487.50 root left outer join, left side:TableReader, equal:[eq(test.t1.a, test.t3.a)]", " ├─TableReader(Build) 9990.00 root partition:all data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t3.a))", " │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", @@ -239,10 +239,10 @@ { "SQL": "select /*+ leading(t2, t1, t3) */ * from t2 left join (t1 left join t3 on t1.a=t3.a) on t2.b=t1.b;", "Plan": [ - "HashJoin 15609.38 root left outer join, equal:[eq(test.t2.b, test.t1.b)]", + "HashJoin 15609.38 root left outer join, left side:TableReader, equal:[eq(test.t2.b, test.t1.b)]", "├─TableReader(Build) 10000.00 root partition:all data:TableFullScan", "│ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", - "└─HashJoin(Probe) 12487.50 root left outer join, equal:[eq(test.t1.a, test.t3.a)]", + "└─HashJoin(Probe) 12487.50 root left outer join, left side:TableReader, equal:[eq(test.t1.a, test.t3.a)]", " ├─TableReader(Build) 9990.00 root partition:all data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t3.a))", " │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", @@ -258,7 +258,7 @@ { "SQL": "select /*+ leading(t2, t3) */ * from t2 left join (t1 join t3 on t1.a=t3.a join t4 on t3.b = t4.b) on t2.b=t1.b;", "Plan": [ - "HashJoin 19492.21 root left outer join, equal:[eq(test.t2.b, test.t1.b)]", + "HashJoin 19492.21 root left outer join, left side:TableReader, equal:[eq(test.t2.b, test.t1.b)]", "├─TableReader(Build) 10000.00 root partition:all data:TableFullScan", "│ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", "└─HashJoin(Probe) 15593.77 root inner join, equal:[eq(test.t3.b, test.t4.b)]", @@ -281,7 +281,7 @@ { "SQL": "select /*+ leading(t3, t4) */ * from t2 left join (t1 join t3 on t1.a=t3.a join t4 on t3.b = t4.b) on t2.b=t1.b;", "Plan": [ - "HashJoin 19492.21 root left outer join, equal:[eq(test.t2.b, test.t1.b)]", + "HashJoin 19492.21 root left outer join, left side:TableReader, equal:[eq(test.t2.b, test.t1.b)]", "├─TableReader(Build) 10000.00 root partition:all data:TableFullScan", "│ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", "└─Projection(Probe) 15593.77 root test.t1.a, test.t1.b, test.t3.a, test.t3.b, test.t4.a, test.t4.b", @@ -303,7 +303,7 @@ "SQL": "select /*+ leading(t3, t4) */ * from t2 left join (t1 join t3 on t1.a=t3.a join t4 on t3.b = t4.b) on t2.b=t1.b join t5 on t2.a = t5.a join t6 on t5.b=t6.b;", "Plan": [ "Projection 30426.12 root test.t2.a, test.t2.b, test.t1.a, test.t1.b, test.t3.a, test.t3.b, test.t4.a, test.t4.b, test.t5.a, test.t5.b, test.t6.a, test.t6.b", - "└─HashJoin 30426.12 root left outer join, equal:[eq(test.t2.b, test.t1.b)]", + "└─HashJoin 30426.12 root left outer join, left side:HashJoin, equal:[eq(test.t2.b, test.t1.b)]", " ├─Projection(Build) 15593.77 root test.t1.a, test.t1.b, test.t3.a, test.t3.b, test.t4.a, test.t4.b", " │ └─HashJoin 15593.77 root inner join, equal:[eq(test.t3.a, test.t1.a)]", " │ ├─TableReader(Build) 9980.01 root partition:all data:Selection", @@ -334,7 +334,7 @@ "SQL": "select /*+ leading(t3, t4) leading(t5, t6) */ * from t2 left join (t1 join t3 on t1.a=t3.a join t4 on t3.b = t4.b) on t2.b=t1.b join t5 on t2.a = t5.a join t6 on t5.b=t6.b;", "Plan": [ "Projection 30426.12 root test.t2.a, test.t2.b, test.t1.a, test.t1.b, test.t3.a, test.t3.b, test.t4.a, test.t4.b, test.t5.a, test.t5.b, test.t6.a, test.t6.b", - "└─HashJoin 30426.12 root left outer join, equal:[eq(test.t2.b, test.t1.b)]", + "└─HashJoin 30426.12 root left outer join, left side:HashJoin, equal:[eq(test.t2.b, test.t1.b)]", " ├─HashJoin(Build) 15593.77 root inner join, equal:[eq(test.t3.b, test.t4.b)]", " │ ├─TableReader(Build) 9990.00 root partition:all data:Selection", " │ │ └─Selection 9990.00 cop[tikv] not(isnull(test.t4.b))", @@ -366,7 +366,7 @@ "SQL": "select /*+ leading(t5, t6, t3, t4) */ * from t2 left join (t1 join t3 on t1.a=t3.a join t4 on t3.b = t4.b) on t2.b=t1.b join t5 on t2.a = t5.a join t6 on t5.b=t6.b;", "Plan": [ "Projection 30426.12 root test.t2.a, test.t2.b, test.t1.a, test.t1.b, test.t3.a, test.t3.b, test.t4.a, test.t4.b, test.t5.a, test.t5.b, test.t6.a, test.t6.b", - "└─HashJoin 30426.12 root left outer join, equal:[eq(test.t2.b, test.t1.b)]", + "└─HashJoin 30426.12 root left outer join, left side:HashJoin, equal:[eq(test.t2.b, test.t1.b)]", " ├─HashJoin(Build) 15593.77 root inner join, equal:[eq(test.t3.b, test.t4.b)]", " │ ├─TableReader(Build) 9990.00 root partition:all data:Selection", " │ │ └─Selection 9990.00 cop[tikv] not(isnull(test.t4.b))", @@ -398,7 +398,7 @@ { "SQL": "select /*+ leading(t1, t2) */ * from t4 join t on t4.a=t.a right join t1 on t.a = t1.a join t2 on t1.b = t2.b join t3 on t2.b=t3.b;", "Plan": [ - "HashJoin 24389.65 root right outer join, equal:[eq(test.t.a, test.t1.a)]", + "HashJoin 24389.65 root right outer join, left side:HashJoin, equal:[eq(test.t.a, test.t1.a)]", "├─HashJoin(Build) 12487.50 root inner join, equal:[eq(test.t4.a, test.t.a)]", "│ ├─TableReader(Build) 9990.00 root partition:all data:Selection", "│ │ └─Selection 9990.00 cop[tikv] not(isnull(test.t.a))", @@ -424,7 +424,7 @@ "SQL": "select /*+ leading(t2, t3) */ * from t4 join t on t4.a=t.a right join t1 on t.a = t1.a join t2 on t1.b = t2.b join t3 on t2.b=t3.b;", "Plan": [ "Projection 24389.65 root test.t4.a, test.t4.b, test.t.a, test.t.b, test.t1.a, test.t1.b, test.t2.a, test.t2.b, test.t3.a, test.t3.b", - "└─HashJoin 24389.65 root right outer join, equal:[eq(test.t.a, test.t1.a)]", + "└─HashJoin 24389.65 root right outer join, left side:HashJoin, equal:[eq(test.t.a, test.t1.a)]", " ├─HashJoin(Build) 12487.50 root inner join, equal:[eq(test.t4.a, test.t.a)]", " │ ├─TableReader(Build) 9990.00 root partition:all data:Selection", " │ │ └─Selection 9990.00 cop[tikv] not(isnull(test.t.a))", @@ -449,7 +449,7 @@ { "SQL": "select /*+ leading(t1, t3) */ * from t4 join t on t4.a=t.a right join t1 on t.a = t1.a join t2 on t1.b = t2.b join t3 on t2.b=t3.b;", "Plan": [ - "HashJoin 24389.65 root right outer join, equal:[eq(test.t.a, test.t1.a)]", + "HashJoin 24389.65 root right outer join, left side:HashJoin, equal:[eq(test.t.a, test.t1.a)]", "├─HashJoin(Build) 12487.50 root inner join, equal:[eq(test.t4.a, test.t.a)]", "│ ├─TableReader(Build) 9990.00 root partition:all data:Selection", "│ │ └─Selection 9990.00 cop[tikv] not(isnull(test.t.a))", @@ -476,11 +476,11 @@ { "SQL": "select /*+ leading(t3) */ * from t2 right join (t1 left join t3 on t1.a=t3.a) on t2.b=t1.b;", "Plan": [ - "HashJoin 15593.77 root right outer join, equal:[eq(test.t2.b, test.t1.b)]", + "HashJoin 15593.77 root right outer join, left side:TableReader, equal:[eq(test.t2.b, test.t1.b)]", "├─TableReader(Build) 9990.00 root partition:all data:Selection", "│ └─Selection 9990.00 cop[tikv] not(isnull(test.t2.b))", "│ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", - "└─HashJoin(Probe) 12487.50 root left outer join, equal:[eq(test.t1.a, test.t3.a)]", + "└─HashJoin(Probe) 12487.50 root left outer join, left side:TableReader, equal:[eq(test.t1.a, test.t3.a)]", " ├─TableReader(Build) 9990.00 root partition:all data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t3.a))", " │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", @@ -492,11 +492,11 @@ { "SQL": "select /*+ leading(t2, t1, t3) */ * from t2 right join (t1 left join t3 on t1.a=t3.a) on t2.b=t1.b;", "Plan": [ - "HashJoin 15593.77 root left outer join, equal:[eq(test.t1.a, test.t3.a)]", + "HashJoin 15593.77 root left outer join, left side:HashJoin, equal:[eq(test.t1.a, test.t3.a)]", "├─TableReader(Build) 9990.00 root partition:all data:Selection", "│ └─Selection 9990.00 cop[tikv] not(isnull(test.t3.a))", "│ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", - "└─HashJoin(Probe) 12487.50 root right outer join, equal:[eq(test.t2.b, test.t1.b)]", + "└─HashJoin(Probe) 12487.50 root right outer join, left side:TableReader, equal:[eq(test.t2.b, test.t1.b)]", " ├─TableReader(Build) 9990.00 root partition:all data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t2.b))", " │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", @@ -513,7 +513,7 @@ " ├─TableReader(Build) 9990.00 root partition:all data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t4.b))", " │ └─TableFullScan 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo", - " └─HashJoin(Probe) 15593.77 root right outer join, equal:[eq(test.t2.b, test.t1.b)]", + " └─HashJoin(Probe) 15593.77 root right outer join, left side:TableReader, equal:[eq(test.t2.b, test.t1.b)]", " ├─TableReader(Build) 9990.00 root partition:all data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t2.b))", " │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", @@ -533,7 +533,7 @@ "SQL": "select /*+ leading(t3, t4) */ * from t2 right join (t1 join t3 on t1.a=t3.a join t4 on t3.b = t4.b) on t2.b=t1.b;", "Plan": [ "Projection 19492.21 root test.t2.a, test.t2.b, test.t1.a, test.t1.b, test.t3.a, test.t3.b, test.t4.a, test.t4.b", - "└─HashJoin 19492.21 root right outer join, equal:[eq(test.t2.b, test.t1.b)]", + "└─HashJoin 19492.21 root right outer join, left side:TableReader, equal:[eq(test.t2.b, test.t1.b)]", " ├─TableReader(Build) 9990.00 root partition:all data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t2.b))", " │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", @@ -706,7 +706,7 @@ { "SQL": "select * from t1 left join t2 on t1.b=t2.b", "Plan": [ - "MergeJoin 12487.50 root left outer join, left key:test.t1.b, right key:test.t2.b", + "MergeJoin 12487.50 root left outer join, left side:Sort, left key:test.t1.b, right key:test.t2.b", "├─Sort(Build) 9990.00 root test.t2.b", "│ └─TableReader 9990.00 root data:Selection", "│ └─Selection 9990.00 cop[tikv] not(isnull(test.t2.b))", @@ -720,7 +720,7 @@ { "SQL": "select * from t1 left join t2 on t1.a=t2.a", "Plan": [ - "IndexHashJoin 12487.50 root left outer join, inner:IndexLookUp, outer key:test.t1.a, inner key:test.t2.a, equal cond:eq(test.t1.a, test.t2.a)", + "IndexHashJoin 12487.50 root left outer join, inner:IndexLookUp, left side:TableReader, outer key:test.t1.a, inner key:test.t2.a, equal cond:eq(test.t1.a, test.t2.a)", "├─TableReader(Build) 10000.00 root data:TableFullScan", "│ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", "└─IndexLookUp(Probe) 12487.50 root ", @@ -733,7 +733,7 @@ { "SQL": "select * from t1 right join t2 on t1.b=t2.b", "Plan": [ - "MergeJoin 12487.50 root right outer join, left key:test.t1.b, right key:test.t2.b", + "MergeJoin 12487.50 root right outer join, left side:Sort, left key:test.t1.b, right key:test.t2.b", "├─Sort(Build) 9990.00 root test.t1.b", "│ └─TableReader 9990.00 root data:Selection", "│ └─Selection 9990.00 cop[tikv] not(isnull(test.t1.b))", @@ -747,7 +747,7 @@ { "SQL": "select * from t1 right join t2 on t1.a=t2.a", "Plan": [ - "IndexHashJoin 12487.50 root right outer join, inner:IndexLookUp, outer key:test.t2.a, inner key:test.t1.a, equal cond:eq(test.t2.a, test.t1.a)", + "IndexHashJoin 12487.50 root right outer join, inner:IndexLookUp, left side:IndexLookUp, outer key:test.t2.a, inner key:test.t1.a, equal cond:eq(test.t2.a, test.t1.a)", "├─TableReader(Build) 10000.00 root data:TableFullScan", "│ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", "└─IndexLookUp(Probe) 12487.50 root ", @@ -929,7 +929,7 @@ " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t2.b))", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t2 pushed down filter:empty, keep order:false, stats:pseudo", - " └─HashJoin(Probe) 15593.77 mpp[tiflash] left outer join, equal:[eq(test.t.a, test.t1.a)]", + " └─HashJoin(Probe) 15593.77 mpp[tiflash] left outer join, left side:HashJoin, equal:[eq(test.t.a, test.t1.a)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t1.a))", @@ -952,7 +952,7 @@ "TableReader 24365.26 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 24365.26 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 24365.26 mpp[tiflash] test.t4.a, test.t4.b, test.t.a, test.t.b, test.t1.a, test.t1.b, test.t2.a, test.t2.b, test.t3.a, test.t3.b", - " └─HashJoin 24365.26 mpp[tiflash] left outer join, equal:[eq(test.t.a, test.t1.a)]", + " └─HashJoin 24365.26 mpp[tiflash] left outer join, left side:HashJoin, equal:[eq(test.t.a, test.t1.a)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t1.a))", @@ -993,7 +993,7 @@ " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t2.b))", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t2 pushed down filter:empty, keep order:false, stats:pseudo", - " └─HashJoin(Probe) 15593.77 mpp[tiflash] left outer join, equal:[eq(test.t.a, test.t1.a)]", + " └─HashJoin(Probe) 15593.77 mpp[tiflash] left outer join, left side:HashJoin, equal:[eq(test.t.a, test.t1.a)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t1.a))", @@ -1026,7 +1026,7 @@ " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t2.b))", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t2 pushed down filter:empty, keep order:false, stats:pseudo", - " └─HashJoin(Probe) 15593.77 mpp[tiflash] left outer join, equal:[eq(test.t.a, test.t1.a)]", + " └─HashJoin(Probe) 15593.77 mpp[tiflash] left outer join, left side:HashJoin, equal:[eq(test.t.a, test.t1.a)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t1.a))", @@ -1049,7 +1049,7 @@ "TableReader 24365.26 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 24365.26 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 24365.26 mpp[tiflash] test.t4.a, test.t4.b, test.t.a, test.t.b, test.t1.a, test.t1.b, test.t2.a, test.t2.b, test.t3.a, test.t3.b", - " └─HashJoin 24365.26 mpp[tiflash] left outer join, equal:[eq(test.t.a, test.t1.a)]", + " └─HashJoin 24365.26 mpp[tiflash] left outer join, left side:HashJoin, equal:[eq(test.t.a, test.t1.a)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t1.a))", @@ -1079,13 +1079,13 @@ "Plan": [ "TableReader 15609.38 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 15609.38 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 15609.38 mpp[tiflash] left outer join, equal:[eq(test.t2.b, test.t1.b)]", + " └─HashJoin 15609.38 mpp[tiflash] left outer join, left side:ExchangeReceiver, equal:[eq(test.t2.b, test.t1.b)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t2.b, collate: binary]", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t2 keep order:false, stats:pseudo", " └─ExchangeReceiver(Probe) 12487.50 mpp[tiflash] ", " └─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.b, collate: binary]", - " └─HashJoin 12487.50 mpp[tiflash] left outer join, equal:[eq(test.t1.a, test.t3.a)]", + " └─HashJoin 12487.50 mpp[tiflash] left outer join, left side:Selection, equal:[eq(test.t1.a, test.t3.a)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t3.a))", @@ -1100,13 +1100,13 @@ "Plan": [ "TableReader 15609.38 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 15609.38 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 15609.38 mpp[tiflash] left outer join, equal:[eq(test.t2.b, test.t1.b)]", + " └─HashJoin 15609.38 mpp[tiflash] left outer join, left side:ExchangeReceiver, equal:[eq(test.t2.b, test.t1.b)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t2.b, collate: binary]", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t2 keep order:false, stats:pseudo", " └─ExchangeReceiver(Probe) 12487.50 mpp[tiflash] ", " └─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t1.b, collate: binary]", - " └─HashJoin 12487.50 mpp[tiflash] left outer join, equal:[eq(test.t1.a, test.t3.a)]", + " └─HashJoin 12487.50 mpp[tiflash] left outer join, left side:Selection, equal:[eq(test.t1.a, test.t3.a)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t3.a))", @@ -1124,7 +1124,7 @@ "Plan": [ "TableReader 19492.21 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 19492.21 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 19492.21 mpp[tiflash] left outer join, equal:[eq(test.t2.b, test.t1.b)]", + " └─HashJoin 19492.21 mpp[tiflash] left outer join, left side:ExchangeReceiver, equal:[eq(test.t2.b, test.t1.b)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t2.b, collate: binary]", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t2 keep order:false, stats:pseudo", @@ -1153,7 +1153,7 @@ "Plan": [ "TableReader 19492.21 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 19492.21 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 19492.21 mpp[tiflash] left outer join, equal:[eq(test.t2.b, test.t1.b)]", + " └─HashJoin 19492.21 mpp[tiflash] left outer join, left side:ExchangeReceiver, equal:[eq(test.t2.b, test.t1.b)]", " ├─ExchangeReceiver(Build) 10000.00 mpp[tiflash] ", " │ └─ExchangeSender 10000.00 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t2.b, collate: binary]", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t2 keep order:false, stats:pseudo", @@ -1181,7 +1181,7 @@ "TableReader 30426.12 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 30426.12 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 30426.12 mpp[tiflash] test.t2.a, test.t2.b, test.t1.a, test.t1.b, test.t3.a, test.t3.b, test.t4.a, test.t4.b, test.t5.a, test.t5.b, test.t6.a, test.t6.b", - " └─HashJoin 30426.12 mpp[tiflash] left outer join, equal:[eq(test.t2.b, test.t1.b)]", + " └─HashJoin 30426.12 mpp[tiflash] left outer join, left side:ExchangeReceiver, equal:[eq(test.t2.b, test.t1.b)]", " ├─ExchangeReceiver(Build) 15593.77 mpp[tiflash] ", " │ └─ExchangeSender 15593.77 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t2.b, collate: binary]", " │ └─HashJoin 15593.77 mpp[tiflash] inner join, equal:[eq(test.t5.b, test.t6.b)]", @@ -1220,7 +1220,7 @@ "TableReader 30426.12 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 30426.12 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 30426.12 mpp[tiflash] test.t2.a, test.t2.b, test.t1.a, test.t1.b, test.t3.a, test.t3.b, test.t4.a, test.t4.b, test.t5.a, test.t5.b, test.t6.a, test.t6.b", - " └─HashJoin 30426.12 mpp[tiflash] left outer join, equal:[eq(test.t2.b, test.t1.b)]", + " └─HashJoin 30426.12 mpp[tiflash] left outer join, left side:ExchangeReceiver, equal:[eq(test.t2.b, test.t1.b)]", " ├─ExchangeReceiver(Build) 15593.77 mpp[tiflash] ", " │ └─ExchangeSender 15593.77 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t2.b, collate: binary]", " │ └─HashJoin 15593.77 mpp[tiflash] inner join, equal:[eq(test.t5.b, test.t6.b)]", @@ -1260,7 +1260,7 @@ "TableReader 30426.12 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 30426.12 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 30426.12 mpp[tiflash] test.t2.a, test.t2.b, test.t1.a, test.t1.b, test.t3.a, test.t3.b, test.t4.a, test.t4.b, test.t5.a, test.t5.b, test.t6.a, test.t6.b", - " └─HashJoin 30426.12 mpp[tiflash] left outer join, equal:[eq(test.t2.b, test.t1.b)]", + " └─HashJoin 30426.12 mpp[tiflash] left outer join, left side:ExchangeReceiver, equal:[eq(test.t2.b, test.t1.b)]", " ├─ExchangeReceiver(Build) 15593.77 mpp[tiflash] ", " │ └─ExchangeSender 15593.77 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t2.b, collate: binary]", " │ └─HashJoin 15593.77 mpp[tiflash] inner join, equal:[eq(test.t5.b, test.t6.b)]", @@ -1300,7 +1300,7 @@ "Plan": [ "TableReader 24389.65 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 24389.65 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 24389.65 mpp[tiflash] right outer join, equal:[eq(test.t.a, test.t1.a)]", + " └─HashJoin 24389.65 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.t.a, test.t1.a)]", " ├─ExchangeReceiver(Build) 12487.50 mpp[tiflash] ", " │ └─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t.a, collate: binary]", " │ └─HashJoin 12487.50 mpp[tiflash] inner join, equal:[eq(test.t4.a, test.t.a)]", @@ -1333,7 +1333,7 @@ "TableReader 24389.65 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 24389.65 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 24389.65 mpp[tiflash] test.t4.a, test.t4.b, test.t.a, test.t.b, test.t1.a, test.t1.b, test.t2.a, test.t2.b, test.t3.a, test.t3.b", - " └─HashJoin 24389.65 mpp[tiflash] right outer join, equal:[eq(test.t.a, test.t1.a)]", + " └─HashJoin 24389.65 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.t.a, test.t1.a)]", " ├─ExchangeReceiver(Build) 12487.50 mpp[tiflash] ", " │ └─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t.a, collate: binary]", " │ └─HashJoin 12487.50 mpp[tiflash] inner join, equal:[eq(test.t4.a, test.t.a)]", @@ -1365,7 +1365,7 @@ "Plan": [ "TableReader 24389.65 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 24389.65 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 24389.65 mpp[tiflash] right outer join, equal:[eq(test.t.a, test.t1.a)]", + " └─HashJoin 24389.65 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.t.a, test.t1.a)]", " ├─ExchangeReceiver(Build) 12487.50 mpp[tiflash] ", " │ └─ExchangeSender 12487.50 mpp[tiflash] ExchangeType: HashPartition, Compression: FAST, Hash Cols: [name: test.t.a, collate: binary]", " │ └─HashJoin 12487.50 mpp[tiflash] inner join, equal:[eq(test.t4.a, test.t.a)]", @@ -1399,12 +1399,12 @@ "Plan": [ "TableReader 15593.77 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 15593.77 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 15593.77 mpp[tiflash] right outer join, equal:[eq(test.t2.b, test.t1.b)]", + " └─HashJoin 15593.77 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.t2.b, test.t1.b)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t2.b))", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t2 pushed down filter:empty, keep order:false, stats:pseudo", - " └─HashJoin(Probe) 12487.50 mpp[tiflash] left outer join, equal:[eq(test.t1.a, test.t3.a)]", + " └─HashJoin(Probe) 12487.50 mpp[tiflash] left outer join, left side:TableFullScan, equal:[eq(test.t1.a, test.t3.a)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t3.a))", @@ -1418,12 +1418,12 @@ "Plan": [ "TableReader 15593.77 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 15593.77 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 15593.77 mpp[tiflash] left outer join, equal:[eq(test.t1.a, test.t3.a)]", + " └─HashJoin 15593.77 mpp[tiflash] left outer join, left side:HashJoin, equal:[eq(test.t1.a, test.t3.a)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t3.a))", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t3 pushed down filter:empty, keep order:false, stats:pseudo", - " └─HashJoin(Probe) 12487.50 mpp[tiflash] right outer join, equal:[eq(test.t2.b, test.t1.b)]", + " └─HashJoin(Probe) 12487.50 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.t2.b, test.t1.b)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t2.b))", @@ -1443,7 +1443,7 @@ " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t4.b))", " │ └─TableFullScan 10000.00 mpp[tiflash] table:t4 pushed down filter:empty, keep order:false, stats:pseudo", - " └─HashJoin(Probe) 15593.77 mpp[tiflash] right outer join, equal:[eq(test.t2.b, test.t1.b)]", + " └─HashJoin(Probe) 15593.77 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.t2.b, test.t1.b)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t2.b))", @@ -1466,7 +1466,7 @@ "TableReader 19492.21 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 19492.21 mpp[tiflash] ExchangeType: PassThrough", " └─Projection 19492.21 mpp[tiflash] test.t2.a, test.t2.b, test.t1.a, test.t1.b, test.t3.a, test.t3.b, test.t4.a, test.t4.b", - " └─HashJoin 19492.21 mpp[tiflash] right outer join, equal:[eq(test.t2.b, test.t1.b)]", + " └─HashJoin 19492.21 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.t2.b, test.t1.b)]", " ├─ExchangeReceiver(Build) 9990.00 mpp[tiflash] ", " │ └─ExchangeSender 9990.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 9990.00 mpp[tiflash] not(isnull(test.t2.b))", diff --git a/pkg/planner/core/casetest/rule/testdata/outer2inner_out.json b/pkg/planner/core/casetest/rule/testdata/outer2inner_out.json index cac213b00a..250987b66f 100644 --- a/pkg/planner/core/casetest/rule/testdata/outer2inner_out.json +++ b/pkg/planner/core/casetest/rule/testdata/outer2inner_out.json @@ -174,7 +174,7 @@ { "SQL": "select * from t1 ta left outer join (t1 tb left outer join t1 tc on tb.b1 = tc.b1) on ta.a1=tc.a1; -- nested join. On clause is null filtering on tc.", "Plan": [ - "HashJoin 15593.77 root left outer join, equal:[eq(test.t1.a1, test.t1.a1)]", + "HashJoin 15593.77 root left outer join, left side:TableReader, equal:[eq(test.t1.a1, test.t1.a1)]", "├─TableReader(Build) 10000.00 root data:TableFullScan", "│ └─TableFullScan 10000.00 cop[tikv] table:ta keep order:false, stats:pseudo", "└─Projection(Probe) 12475.01 root test.t1.a1, test.t1.b1, test.t1.c1, test.t1.a1, test.t1.b1, test.t1.c1", @@ -245,7 +245,7 @@ { "SQL": "select * from t1 right join t2 on a1=a2 where exists (select 1 from t3 where b1=b3) -- semi join is null filtering on the outer join", "Plan": [ - "HashJoin 9980.01 root semi join, equal:[eq(test.t1.b1, test.t3.b3)]", + "HashJoin 9980.01 root semi join, left side:HashJoin, equal:[eq(test.t1.b1, test.t3.b3)]", "├─TableReader(Build) 9990.00 root data:Selection", "│ └─Selection 9990.00 cop[tikv] not(isnull(test.t3.b3))", "│ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", @@ -283,7 +283,7 @@ "Plan": [ "Projection 6523.44 root test.d.pk, test.d.col_blob, test.d.col_blob_key, test.d.col_varchar_key, test.d.col_date, test.d.col_int_key, test.dd.pk, test.dd.col_blob, test.dd.col_blob_key, test.dd.col_date, test.dd.col_int_key, test.d.col_date", "└─HashJoin 6523.44 root inner join, equal:[eq(test.d.col_date, Column#41)]", - " ├─HashJoin(Build) 4175.00 root left outer join, equal:[eq(test.d.col_blob_key, test.dd.col_blob_key)]", + " ├─HashJoin(Build) 4175.00 root left outer join, left side:TableReader, equal:[eq(test.d.col_blob_key, test.dd.col_blob_key)]", " │ ├─TableReader(Build) 3340.00 root data:Selection", " │ │ └─Selection 3340.00 cop[tikv] or(isnull(test.d.col_varchar_key), ge(test.d.col_blob_key, \"a\"))", " │ │ └─TableFullScan 10000.00 cop[tikv] table:alias1 keep order:false, stats:pseudo", @@ -319,7 +319,7 @@ { "SQL": "select * from dd as outr1 WHERE outr1.col_blob IN (SELECT DISTINCT innr1.col_blob_key AS y FROM d AS innrcte left outer join dd AS innr1 ON innr1.pk = innrcte.col_date WHERE outr1.col_int_key > 6)", "Plan": [ - "Apply 9990.00 root semi join, equal:[eq(test.dd.col_blob, test.dd.col_blob_key)]", + "Apply 9990.00 root semi join, left side:TableReader, equal:[eq(test.dd.col_blob, test.dd.col_blob_key)]", "├─TableReader(Build) 9990.00 root data:Selection", "│ └─Selection 9990.00 cop[tikv] not(isnull(test.dd.col_blob))", "│ └─TableFullScan 10000.00 cop[tikv] table:outr1 keep order:false, stats:pseudo", @@ -351,7 +351,7 @@ "SQL": "select * from t1 left outer join t2 on a1=a2 where b2 is null -- negative case with single predicate which is not null filtering", "Plan": [ "Selection 9990.00 root isnull(test.t2.b2)", - "└─HashJoin 12487.50 root left outer join, equal:[eq(test.t1.a1, test.t2.a2)]", + "└─HashJoin 12487.50 root left outer join, left side:TableReader, equal:[eq(test.t1.a1, test.t2.a2)]", " ├─TableReader(Build) 9990.00 root data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t2.a2))", " │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", @@ -363,7 +363,7 @@ "SQL": "select * from t1 left outer join t2 on a1=a2 where c2 = 5 OR b2 is null -- negative case with A OR B (A is null filtering and B is not)", "Plan": [ "Selection 9990.00 root or(eq(test.t2.c2, 5), isnull(test.t2.b2))", - "└─HashJoin 12487.50 root left outer join, equal:[eq(test.t1.a1, test.t2.a2)]", + "└─HashJoin 12487.50 root left outer join, left side:TableReader, equal:[eq(test.t1.a1, test.t2.a2)]", " ├─TableReader(Build) 9990.00 root data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t2.a2))", " │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", @@ -375,7 +375,7 @@ "SQL": "select * from t1 left outer join t2 on a1=a2 where not(b2 is not null) -- nested 'not' negative case", "Plan": [ "Selection 9990.00 root not(not(isnull(test.t2.b2)))", - "└─HashJoin 12487.50 root left outer join, equal:[eq(test.t1.a1, test.t2.a2)]", + "└─HashJoin 12487.50 root left outer join, left side:TableReader, equal:[eq(test.t1.a1, test.t2.a2)]", " ├─TableReader(Build) 9990.00 root data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t2.a2))", " │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", @@ -387,7 +387,7 @@ "SQL": "select * from t1 left outer join t2 on a1=a2 where not(not(b2 is null)) -- nested 'not' negative case", "Plan": [ "Selection 9990.00 root not(not(isnull(test.t2.b2)))", - "└─HashJoin 12487.50 root left outer join, equal:[eq(test.t1.a1, test.t2.a2)]", + "└─HashJoin 12487.50 root left outer join, left side:TableReader, equal:[eq(test.t1.a1, test.t2.a2)]", " ├─TableReader(Build) 9990.00 root data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t2.a2))", " │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", @@ -398,7 +398,7 @@ { "SQL": "select * from t1 left outer join t2 on a1=a2 where b1 is not null -- negative case with condition on outer table.", "Plan": [ - "HashJoin 12487.50 root left outer join, equal:[eq(test.t1.a1, test.t2.a2)]", + "HashJoin 12487.50 root left outer join, left side:TableReader, equal:[eq(test.t1.a1, test.t2.a2)]", "├─TableReader(Build) 9990.00 root data:Selection", "│ └─Selection 9990.00 cop[tikv] not(isnull(test.t2.a2))", "│ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", @@ -411,7 +411,7 @@ "SQL": "select * from t2 left outer join t1 on a1=a2 where coalesce(b1,2) = 2; -- true condition for b1=NULL", "Plan": [ "Selection 9990.00 root eq(coalesce(test.t1.b1, 2), 2)", - "└─HashJoin 12487.50 root left outer join, equal:[eq(test.t2.a2, test.t1.a1)]", + "└─HashJoin 12487.50 root left outer join, left side:TableReader, equal:[eq(test.t2.a2, test.t1.a1)]", " ├─TableReader(Build) 9990.00 root data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t1.a1))", " │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", @@ -423,7 +423,7 @@ "SQL": "select * from t2 left outer join t1 on a1=a2 where true OR b1 = 5; -- negative case with OR and one branch is TRUE", "Plan": [ "Selection 9990.00 root or(1, eq(test.t1.b1, 5))", - "└─HashJoin 12487.50 root left outer join, equal:[eq(test.t2.a2, test.t1.a1)]", + "└─HashJoin 12487.50 root left outer join, left side:TableReader, equal:[eq(test.t2.a2, test.t1.a1)]", " ├─TableReader(Build) 9990.00 root data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t1.a1))", " │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", @@ -434,7 +434,7 @@ { "SQL": "select * from t3 as t1 left join t3 as t2 on t1.c3 = t2.c3 where t1.b3 != NULL -- negative case with self join", "Plan": [ - "HashJoin 0.00 root left outer join, equal:[eq(test.t3.c3, test.t3.c3)]", + "HashJoin 0.00 root left outer join, left side:TableReader, equal:[eq(test.t3.c3, test.t3.c3)]", "├─TableReader(Build) 0.00 root data:Selection", "│ └─Selection 0.00 cop[tikv] ne(test.t3.b3, NULL)", "│ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", @@ -446,10 +446,10 @@ { "SQL": "select * from (t1 left outer join t2 on a1=a2) left outer join t3 on a2=a3 and b2 = 5 -- negative case. inner side is not a join", "Plan": [ - "HashJoin 15609.38 root left outer join, equal:[eq(test.t1.a1, test.t2.a2)]", + "HashJoin 15609.38 root left outer join, left side:TableReader, equal:[eq(test.t1.a1, test.t2.a2)]", "├─TableReader(Build) 10000.00 root data:TableFullScan", "│ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", - "└─HashJoin(Probe) 12487.50 root left outer join, equal:[eq(test.t2.a2, test.t3.a3)], left cond:[eq(test.t2.b2, 5)]", + "└─HashJoin(Probe) 12487.50 root left outer join, left side:TableReader, equal:[eq(test.t2.a2, test.t3.a3)], left cond:[eq(test.t2.b2, 5)]", " ├─TableReader(Build) 9990.00 root data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t3.a3))", " │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", @@ -462,11 +462,11 @@ "SQL": "select * from t1 ta right outer join (t1 tb right outer join t1 tc on tb.b1 = tc.b1) on ta.a1=tc.a1; -- negative case. inner side is not a join", "Plan": [ "Projection 15593.77 root test.t1.a1, test.t1.b1, test.t1.c1, test.t1.a1, test.t1.b1, test.t1.c1, test.t1.a1, test.t1.b1, test.t1.c1", - "└─HashJoin 15593.77 root right outer join, equal:[eq(test.t1.b1, test.t1.b1)]", + "└─HashJoin 15593.77 root right outer join, left side:TableReader, equal:[eq(test.t1.b1, test.t1.b1)]", " ├─TableReader(Build) 9990.00 root data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t1.b1))", " │ └─TableFullScan 10000.00 cop[tikv] table:tb keep order:false, stats:pseudo", - " └─HashJoin(Probe) 12487.50 root right outer join, equal:[eq(test.t1.a1, test.t1.a1)]", + " └─HashJoin(Probe) 12487.50 root right outer join, left side:TableReader, equal:[eq(test.t1.a1, test.t1.a1)]", " ├─TableReader(Build) 9990.00 root data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t1.a1))", " │ └─TableFullScan 10000.00 cop[tikv] table:ta keep order:false, stats:pseudo", @@ -478,8 +478,8 @@ "SQL": "select * from t1 ta right outer join (t1 tb right outer join t1 tc on tb.b1 = tc.b1) on ta.a1=tc.a1 where tc.a1 > 5; -- negative case. inner side is not a join and WHERE clause on outer table", "Plan": [ "Projection 5208.33 root test.t1.a1, test.t1.b1, test.t1.c1, test.t1.a1, test.t1.b1, test.t1.c1, test.t1.a1, test.t1.b1, test.t1.c1", - "└─HashJoin 5208.33 root right outer join, equal:[eq(test.t1.b1, test.t1.b1)]", - " ├─HashJoin(Build) 4166.67 root right outer join, equal:[eq(test.t1.a1, test.t1.a1)]", + "└─HashJoin 5208.33 root right outer join, left side:TableReader, equal:[eq(test.t1.b1, test.t1.b1)]", + " ├─HashJoin(Build) 4166.67 root right outer join, left side:TableReader, equal:[eq(test.t1.a1, test.t1.a1)]", " │ ├─TableReader(Build) 3333.33 root data:Selection", " │ │ └─Selection 3333.33 cop[tikv] gt(test.t1.a1, 5)", " │ │ └─TableFullScan 10000.00 cop[tikv] table:tc keep order:false, stats:pseudo", @@ -498,7 +498,7 @@ "├─TableReader(Build) 9990.00 root data:Selection", "│ └─Selection 9990.00 cop[tikv] not(isnull(test.t3.b3))", "│ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo", - "└─HashJoin(Probe) 12487.50 root left outer join, equal:[eq(test.t2.a2, test.t1.a1)]", + "└─HashJoin(Probe) 12487.50 root left outer join, left side:TableReader, equal:[eq(test.t2.a2, test.t1.a1)]", " ├─TableReader(Build) 9990.00 root data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t1.a1))", " │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", @@ -511,7 +511,7 @@ "SQL": "select t1.c1 in (select count(s.b1) from t1 s where s.a1 = t1.a1) from t1 -- subquery test that generates outer join and not converted", "Plan": [ "Projection 10000.00 root Column#14", - "└─Apply 10000.00 root CARTESIAN left outer semi join, other cond:eq(test.t1.c1, Column#13)", + "└─Apply 10000.00 root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(test.t1.c1, Column#13)", " ├─TableReader(Build) 10000.00 root data:TableFullScan", " │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", " └─StreamAgg(Probe) 10000.00 root funcs:count(Column#16)->Column#13", @@ -524,10 +524,10 @@ { "SQL": "SELECT * FROM ti LEFT JOIN (SELECT i FROM ti WHERE FALSE) AS d1 ON ti.i = d1.i WHERE NOT EXISTS (SELECT 1 FROM ti AS inner_t1 WHERE i = d1.i) -- anti semi join", "Plan": [ - "HashJoin 8000.00 root anti semi join, equal:[eq(test.ti.i, test.ti.i)]", + "HashJoin 8000.00 root anti semi join, left side:HashJoin, equal:[eq(test.ti.i, test.ti.i)]", "├─TableReader(Build) 10000.00 root data:TableFullScan", "│ └─TableFullScan 10000.00 cop[tikv] table:inner_t1 keep order:false, stats:pseudo", - "└─HashJoin(Probe) 10000.00 root left outer join, equal:[eq(test.ti.i, test.ti.i)]", + "└─HashJoin(Probe) 10000.00 root left outer join, left side:TableReader, equal:[eq(test.ti.i, test.ti.i)]", " ├─Selection(Build) 0.00 root not(isnull(test.ti.i))", " │ └─TableDual 0.00 root rows:0", " └─TableReader(Probe) 10000.00 root data:TableFullScan", @@ -539,7 +539,7 @@ "Plan": [ "HashAgg 6400.00 root group by:test.t1.b1, funcs:count(1)->Column#10", "└─Selection 8000.00 root gt(plus(test.t1.a1, 100), ifnull(Column#9, 0))", - " └─HashJoin 10000.00 root left outer join, equal:[eq(test.t1.a1, test.t2.a2) eq(test.t1.b1, test.t2.b2)]", + " └─HashJoin 10000.00 root left outer join, left side:TableReader, equal:[eq(test.t1.a1, test.t2.a2) eq(test.t1.b1, test.t2.b2)]", " ├─HashAgg(Build) 7984.01 root group by:test.t2.a2, test.t2.b2, funcs:count(Column#11)->Column#9, funcs:firstrow(test.t2.a2)->test.t2.a2, funcs:firstrow(test.t2.b2)->test.t2.b2", " │ └─TableReader 7984.01 root data:HashAgg", " │ └─HashAgg 7984.01 cop[tikv] group by:test.t2.a2, test.t2.b2, funcs:count(1)->Column#11", @@ -555,7 +555,7 @@ "Projection 6393.60 root Column#21, ifnull(test.t2.b2, 5)->Column#22", "└─HashAgg 6393.60 root group by:test.t2.b2, funcs:count(test.t2.a2)->Column#21, funcs:firstrow(test.t2.b2)->test.t2.b2", " └─Selection 9990.00 root gt(ifnull(test.t2.b2, 5), 1)", - " └─HashJoin 12487.50 root left outer join, equal:[eq(test.t1.a1, test.t2.a2)]", + " └─HashJoin 12487.50 root left outer join, left side:TableReader, equal:[eq(test.t1.a1, test.t2.a2)]", " ├─TableReader(Build) 10000.00 root data:TableFullScan", " │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", " └─TableReader(Probe) 9990.00 root data:Selection", @@ -569,7 +569,7 @@ "Projection 6393.60 root Column#21, ifnull(test.t2.b2, 5)->Column#22", "└─Selection 6393.60 root gt(Column#21, 1)", " └─HashAgg 7992.00 root group by:test.t2.b2, funcs:count(test.t2.a2)->Column#21, funcs:firstrow(test.t2.b2)->test.t2.b2", - " └─HashJoin 12487.50 root left outer join, equal:[eq(test.t1.a1, test.t2.a2)]", + " └─HashJoin 12487.50 root left outer join, left side:TableReader, equal:[eq(test.t1.a1, test.t2.a2)]", " ├─TableReader(Build) 10000.00 root data:TableFullScan", " │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo", " └─TableReader(Probe) 9990.00 root data:Selection", @@ -581,7 +581,7 @@ "SQL": "select * from t0 left outer join t11 on a0=a1 where t0.b0 in (t0.b0, t11.b1)", "Plan": [ "Selection 9990.00 root in(test.t0.b0, test.t0.b0, test.t11.b1)", - "└─HashJoin 12487.50 root left outer join, equal:[eq(test.t0.a0, test.t11.a1)]", + "└─HashJoin 12487.50 root left outer join, left side:TableReader, equal:[eq(test.t0.a0, test.t11.a1)]", " ├─TableReader(Build) 9990.00 root data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t11.a1))", " │ └─TableFullScan 10000.00 cop[tikv] table:t11 keep order:false, stats:pseudo", @@ -593,7 +593,7 @@ "SQL": "select * from t0 left outer join t11 on a0=a1 where '5' not in (t0.b0, t11.b1)", "Plan": [ "Selection 9990.00 root not(in(\"5\", test.t0.b0, test.t11.b1))", - "└─HashJoin 12487.50 root left outer join, equal:[eq(test.t0.a0, test.t11.a1)]", + "└─HashJoin 12487.50 root left outer join, left side:TableReader, equal:[eq(test.t0.a0, test.t11.a1)]", " ├─TableReader(Build) 9990.00 root data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t11.a1))", " │ └─TableFullScan 10000.00 cop[tikv] table:t11 keep order:false, stats:pseudo", @@ -605,7 +605,7 @@ "SQL": "select * from t0 left outer join t11 on a0=a1 where '1' in (t0.b0, t11.b1)", "Plan": [ "Selection 9990.00 root in(\"1\", test.t0.b0, test.t11.b1)", - "└─HashJoin 12487.50 root left outer join, equal:[eq(test.t0.a0, test.t11.a1)]", + "└─HashJoin 12487.50 root left outer join, left side:TableReader, equal:[eq(test.t0.a0, test.t11.a1)]", " ├─TableReader(Build) 9990.00 root data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t11.a1))", " │ └─TableFullScan 10000.00 cop[tikv] table:t11 keep order:false, stats:pseudo", @@ -617,7 +617,7 @@ "SQL": "select * from t0 left outer join t11 on a0=a1 where t0.b0 in ('5', t11.b1) -- some = in the in list is not null filtering", "Plan": [ "Selection 9990.00 root in(test.t0.b0, \"5\", test.t11.b1)", - "└─HashJoin 12487.50 root left outer join, equal:[eq(test.t0.a0, test.t11.a1)]", + "└─HashJoin 12487.50 root left outer join, left side:TableReader, equal:[eq(test.t0.a0, test.t11.a1)]", " ├─TableReader(Build) 9990.00 root data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t11.a1))", " │ └─TableFullScan 10000.00 cop[tikv] table:t11 keep order:false, stats:pseudo", @@ -629,25 +629,13 @@ "SQL": "select * from t0 left outer join t11 on a0=a1 where '5' in (t0.b0, t11.b1) -- some = in the in list is not null filtering", "Plan": [ "Selection 9990.00 root in(\"5\", test.t0.b0, test.t11.b1)", - "└─HashJoin 12487.50 root left outer join, equal:[eq(test.t0.a0, test.t11.a1)]", + "└─HashJoin 12487.50 root left outer join, left side:TableReader, equal:[eq(test.t0.a0, test.t11.a1)]", " ├─TableReader(Build) 9990.00 root data:Selection", " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t11.a1))", " │ └─TableFullScan 10000.00 cop[tikv] table:t11 keep order:false, stats:pseudo", " └─TableReader(Probe) 10000.00 root data:TableFullScan", " └─TableFullScan 10000.00 cop[tikv] table:t0 keep order:false, stats:pseudo" ] - }, - { - "SQL": "select * from t1 left outer join t2 on a1=a2 where not (b2 is NOT NULL AND c2 = 5) -- NOT case ", - "Plan": [ - "Selection 9990.00 root not(and(not(isnull(test.t2.b2)), eq(test.t2.c2, 5)))", - "└─HashJoin 12487.50 root left outer join, equal:[eq(test.t1.a1, test.t2.a2)]", - " ├─TableReader(Build) 9990.00 root data:Selection", - " │ └─Selection 9990.00 cop[tikv] not(isnull(test.t2.a2))", - " │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", - " └─TableReader(Probe) 10000.00 root data:TableFullScan", - " └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo" - ] } ] }, @@ -657,14 +645,14 @@ { "SQL": "with cte_0 AS (select 1 as c1, case when ref_0.c_jbb then inet6_aton(ref_0.c_foveoe) else ref_4.c_cz end as c5 from t1 as ref_0 join (t1 as ref_4 right outer join t2 as ref_5 on ref_5.c_g7eofzlxn != 1)), cte_4 as (select 1 as c1 from t2) select ref_34.c1 as c5 from cte_0 as ref_34 where exists (select 1 from cte_4 as ref_35 where ref_34.c1 <= case when ref_34.c5 then cast(1 as char) else ref_34.c5 end)", "Plan": [ - "HashJoin 800000000000.00 root CARTESIAN semi join", + "HashJoin 800000000000.00 root CARTESIAN semi join, left side:Projection", "├─TableReader(Build) 10000.00 root data:TableFullScan", "│ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo", "└─Projection(Probe) 1000000000000.00 root 1->Column#28", " └─HashJoin 1000000000000.00 root CARTESIAN inner join, other cond:le(1, cast(case(istrue_with_null(cast(case(istrue_with_null(cast(test.t1.c_jbb, double BINARY)), from_binary(inet6_aton(test.t1.c_foveoe)), test.t1.c_cz), double BINARY)), \"1\", case(istrue_with_null(cast(test.t1.c_jbb, double BINARY)), from_binary(inet6_aton(test.t1.c_foveoe)), test.t1.c_cz)), double BINARY))", " ├─TableReader(Build) 10000.00 root data:TableFullScan", " │ └─TableFullScan 10000.00 cop[tikv] table:ref_0 keep order:false, stats:pseudo", - " └─HashJoin(Probe) 100000000.00 root CARTESIAN right outer join, right cond:ne(test.t2.c_g7eofzlxn, 1)", + " └─HashJoin(Probe) 100000000.00 root CARTESIAN right outer join, left side:TableReader, right cond:ne(test.t2.c_g7eofzlxn, 1)", " ├─TableReader(Build) 10000.00 root data:TableFullScan", " │ └─TableFullScan 10000.00 cop[tikv] table:ref_5 keep order:false, stats:pseudo", " └─TableReader(Probe) 10000.00 root data:TableFullScan", diff --git a/pkg/planner/core/casetest/testdata/integration_suite_out.json b/pkg/planner/core/casetest/testdata/integration_suite_out.json index c90d518f16..79112bdc68 100644 --- a/pkg/planner/core/casetest/testdata/integration_suite_out.json +++ b/pkg/planner/core/casetest/testdata/integration_suite_out.json @@ -165,7 +165,7 @@ { "SQL": "explain format = 'verbose' select (2) in (select /*+ read_from_storage(tiflash[t1]) */ count(*) from t1) from (select t.b < (select /*+ read_from_storage(tiflash[t2]) */ t.b from t2 limit 1 ) from t3 t) t; -- we do generate the agg pushed-down plan of mpp, but cost-cmp failed", "Plan": [ - "HashJoin_17 3.00 32781.07 root CARTESIAN left outer semi join", + "HashJoin_17 3.00 32781.07 root CARTESIAN left outer semi join, left side:IndexReader_21", "├─Selection_22(Build) 0.80 31149.25 root eq(2, Column#18)", "│ └─StreamAgg_29 1.00 31099.35 root funcs:count(1)->Column#18", "│ └─TableReader_41 3.00 30949.65 root MppVersion: 2, data:ExchangeSender_40", diff --git a/pkg/planner/core/casetest/testdata/plan_normalized_suite_out.json b/pkg/planner/core/casetest/testdata/plan_normalized_suite_out.json index 7be4636f8f..0f4f0df24e 100644 --- a/pkg/planner/core/casetest/testdata/plan_normalized_suite_out.json +++ b/pkg/planner/core/casetest/testdata/plan_normalized_suite_out.json @@ -55,7 +55,7 @@ "SQL": "select * from t1 where t1.b > 1 and t1.a in (select sum(t2.b) from t2 where t2.a=t1.a and t2.b is not null)", "Plan": [ " Projection root test.t1.a, test.t1.b, test.t1.c", - " └─Apply root semi join, equal:eq(?, ?)", + " └─Apply root semi join, left side:Projection, equal:eq(?, ?)", " ├─Projection root cast(test.t1.a, decimal(10,0) BINARY), test.t1.a, test.t1.b, test.t1.c", " │ └─TableReader root ", " │ └─Selection cop gt(test.t1.b, ?)", @@ -445,8 +445,8 @@ "Plan": [ " TableReader root ", " └─ExchangeSender cop[tiflash] ", - " └─Selection cop[tiflash] gt(test.t1.b, ?), or(lt(test.t1.a, ?), lt(test.t1.b, ?))", - " └─TableFullScan cop[tiflash] table:t1, range:[?,?], pushed down filter:gt(test.t1.a, ?), keep order:false" + " └─Selection cop[tiflash] gt(test.t1.a, ?), or(lt(test.t1.a, ?), lt(test.t1.b, ?))", + " └─TableFullScan cop[tiflash] table:t1, range:[?,?], pushed down filter:gt(test.t1.b, ?), keep order:false" ] }, { @@ -454,8 +454,8 @@ "Plan": [ " TableReader root ", " └─ExchangeSender cop[tiflash] ", - " └─Selection cop[tiflash] gt(test.t1.b, ?), gt(test.t1.c, ?), or(lt(test.t1.a, ?), lt(test.t1.b, ?))", - " └─TableFullScan cop[tiflash] table:t1, range:[?,?], pushed down filter:gt(test.t1.a, ?), keep order:false" + " └─Selection cop[tiflash] gt(test.t1.a, ?), gt(test.t1.c, ?), or(lt(test.t1.a, ?), lt(test.t1.b, ?))", + " └─TableFullScan cop[tiflash] table:t1, range:[?,?], pushed down filter:gt(test.t1.b, ?), keep order:false" ] }, { diff --git a/pkg/planner/core/casetest/testdata/stats_suite_out.json b/pkg/planner/core/casetest/testdata/stats_suite_out.json index 2fbeb61141..683fd4d919 100644 --- a/pkg/planner/core/casetest/testdata/stats_suite_out.json +++ b/pkg/planner/core/casetest/testdata/stats_suite_out.json @@ -181,7 +181,7 @@ "Plan": [ "StreamAgg 4.00 root group by:Column#14, Column#15, funcs:count(Column#13)->Column#11", "└─Projection 4.00 root gt(test.t1.b, test.t2.b)->Column#13, test.t1.a->Column#14, test.t1.b->Column#15", - " └─Apply 4.00 root CARTESIAN left outer join", + " └─Apply 4.00 root CARTESIAN left outer join, left side:IndexReader", " ├─IndexReader(Build) 4.00 root index:IndexFullScan", " │ └─IndexFullScan 4.00 cop[tikv] table:t1, index:a(a, b) keep order:true", " └─MaxOneRow(Probe) 4.00 root ", @@ -193,7 +193,7 @@ "SQL": "select count(tmp.cmp) from (select t1.a as a, t1.b as b, (t1.b in (select t2.b from t2 where t2.a = t1.a limit 3)) as cmp from t1) tmp group by tmp.a, tmp.b", "Plan": [ "StreamAgg 4.00 root group by:test.t1.a, test.t1.b, funcs:count(Column#10)->Column#11", - "└─Apply 4.00 root left outer semi join, equal:[eq(test.t1.b, test.t2.b)]", + "└─Apply 4.00 root left outer semi join, left side:IndexReader, equal:[eq(test.t1.b, test.t2.b)]", " ├─IndexReader(Build) 4.00 root index:IndexFullScan", " │ └─IndexFullScan 4.00 cop[tikv] table:t1, index:a(a, b) keep order:true", " └─Limit(Probe) 12.00 root offset:0, count:3", @@ -206,7 +206,7 @@ "SQL": "select count(tmp.cmp) from (select t1.a as a, t1.b as b, (t1.b not in (select t2.b from t2 where t2.a = t1.a limit 3)) as cmp from t1) tmp group by tmp.a, tmp.b", "Plan": [ "StreamAgg 4.00 root group by:test.t1.a, test.t1.b, funcs:count(Column#10)->Column#11", - "└─Apply 4.00 root anti left outer semi join, equal:[eq(test.t1.b, test.t2.b)]", + "└─Apply 4.00 root anti left outer semi join, left side:IndexReader, equal:[eq(test.t1.b, test.t2.b)]", " ├─IndexReader(Build) 4.00 root index:IndexFullScan", " │ └─IndexFullScan 4.00 cop[tikv] table:t1, index:a(a, b) keep order:true", " └─Limit(Probe) 12.00 root offset:0, count:3", @@ -219,7 +219,7 @@ "SQL": "select count(1) from t1 left join t2 on t1.a = t2.a group by t1.a, t1.b", "Plan": [ "HashAgg 4.00 root group by:test.t1.a, test.t1.b, funcs:count(1)->Column#7", - "└─MergeJoin 12.00 root left outer join, left key:test.t1.a, right key:test.t2.a", + "└─MergeJoin 12.00 root left outer join, left side:IndexReader, left key:test.t1.a, right key:test.t2.a", " ├─IndexReader(Build) 9.00 root index:IndexFullScan", " │ └─IndexFullScan 9.00 cop[tikv] table:t2, index:a(a, b) keep order:true", " └─IndexReader(Probe) 4.00 root index:IndexFullScan", @@ -230,7 +230,7 @@ "SQL": "select count(1) from t1 right join t2 on t1.a = t2.a group by t2.a, t2.b", "Plan": [ "HashAgg 9.00 root group by:test.t2.a, test.t2.b, funcs:count(1)->Column#7", - "└─MergeJoin 12.00 root right outer join, left key:test.t1.a, right key:test.t2.a", + "└─MergeJoin 12.00 root right outer join, left side:IndexReader, left key:test.t1.a, right key:test.t2.a", " ├─IndexReader(Build) 4.00 root index:IndexFullScan", " │ └─IndexFullScan 4.00 cop[tikv] table:t1, index:a(a, b) keep order:true", " └─IndexReader(Probe) 9.00 root index:IndexFullScan", @@ -241,7 +241,7 @@ "SQL": "select count(tmp.cmp) from (select t1.a as a, t1.b as b, (t1.b in (select t2.b from t2 where t2.a > t1.a)) as cmp from t1) tmp group by tmp.a, tmp.b", "Plan": [ "HashAgg 4.00 root group by:test.t1.a, test.t1.b, funcs:count(Column#10)->Column#11", - "└─HashJoin 4.00 root left outer semi join, equal:[eq(test.t1.b, test.t2.b)], other cond:gt(test.t2.a, test.t1.a)", + "└─HashJoin 4.00 root left outer semi join, left side:IndexReader, equal:[eq(test.t1.b, test.t2.b)], other cond:gt(test.t2.a, test.t1.a)", " ├─IndexReader(Build) 9.00 root index:IndexFullScan", " │ └─IndexFullScan 9.00 cop[tikv] table:t2, index:a(a, b) keep order:false", " └─IndexReader(Probe) 4.00 root index:IndexFullScan", @@ -252,7 +252,7 @@ "SQL": "select count(tmp.cmp) from (select t1.a as a, t1.b as b, (t1.b not in (select t2.b from t2 where t2.a > t1.a)) as cmp from t1) tmp group by tmp.a, tmp.b", "Plan": [ "HashAgg 4.00 root group by:test.t1.a, test.t1.b, funcs:count(Column#10)->Column#11", - "└─HashJoin 4.00 root anti left outer semi join, equal:[eq(test.t1.b, test.t2.b)], other cond:gt(test.t2.a, test.t1.a)", + "└─HashJoin 4.00 root anti left outer semi join, left side:IndexReader, equal:[eq(test.t1.b, test.t2.b)], other cond:gt(test.t2.a, test.t1.a)", " ├─IndexReader(Build) 9.00 root index:IndexFullScan", " │ └─IndexFullScan 9.00 cop[tikv] table:t2, index:a(a, b) keep order:false", " └─IndexReader(Probe) 4.00 root index:IndexFullScan", @@ -263,7 +263,7 @@ "SQL": "select * from t1 left join (select t2.a as a, t2.b as b, count(1) as cnt from t2 group by t2.a, t2.b) as tmp on t1.a = tmp.a and t1.b = tmp.b", "Plan": [ "Projection 4.00 root test.t1.a, test.t1.b, test.t2.a, test.t2.b, Column#7", - "└─MergeJoin 4.00 root left outer join, left key:test.t1.a, test.t1.b, right key:test.t2.a, test.t2.b", + "└─MergeJoin 4.00 root left outer join, left side:IndexReader, left key:test.t1.a, test.t1.b, right key:test.t2.a, test.t2.b", " ├─StreamAgg(Build) 9.00 root group by:test.t2.a, test.t2.b, funcs:count(1)->Column#7, funcs:firstrow(test.t2.a)->test.t2.a, funcs:firstrow(test.t2.b)->test.t2.b", " │ └─IndexReader 9.00 root index:IndexFullScan", " │ └─IndexFullScan 9.00 cop[tikv] table:t2, index:a(a, b) keep order:true", diff --git a/pkg/planner/core/explain.go b/pkg/planner/core/explain.go index 5e2b118943..191d09f61c 100644 --- a/pkg/planner/core/explain.go +++ b/pkg/planner/core/explain.go @@ -27,6 +27,7 @@ import ( "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/mysql" + "github.com/pingcap/tidb/pkg/planner/core/base" "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" @@ -572,13 +573,15 @@ func (p *PhysicalIndexJoin) explainInfo(normalized bool, isIndexMergeJoin bool) exprCtx := p.SCtx().GetExprCtx() evalCtx := exprCtx.GetEvalCtx() - buffer := bytes.NewBufferString(p.JoinType.String()) + buffer := new(strings.Builder) + buffer.WriteString(p.JoinType.String()) buffer.WriteString(", inner:") if normalized { buffer.WriteString(p.Children()[p.InnerChildIdx].TP()) } else { buffer.WriteString(p.Children()[p.InnerChildIdx].ExplainID().String()) } + explainJoinLeftSide(buffer, p.JoinType.IsInnerJoin(), normalized, p.Children()[0]) if len(p.OuterJoinKeys) > 0 { buffer.WriteString(", outer key:") buffer.Write(expression.ExplainColumnList(evalCtx, p.OuterJoinKeys)) @@ -654,7 +657,7 @@ func (p *PhysicalHashJoin) explainInfo(normalized bool) string { } buffer.WriteString(p.JoinType.String()) - + explainJoinLeftSide(buffer, p.JoinType.IsInnerJoin(), normalized, p.Children()[0]) evalCtx := p.SCtx().GetExprCtx().GetEvalCtx() if len(p.EqualConditions) > 0 { if normalized { @@ -726,6 +729,17 @@ func (p *PhysicalHashJoin) explainInfo(normalized bool) string { return buffer.String() } +func explainJoinLeftSide(buffer *strings.Builder, isInnerJoin bool, normalized bool, leftSide base.PhysicalPlan) { + if !isInnerJoin { + buffer.WriteString(", left side:") + if normalized { + buffer.WriteString(leftSide.TP()) + } else { + buffer.WriteString(leftSide.ExplainID().String()) + } + } +} + // ExplainInfo implements Plan interface. func (p *PhysicalMergeJoin) ExplainInfo() string { return p.explainInfo(false) @@ -740,7 +754,9 @@ func (p *PhysicalMergeJoin) explainInfo(normalized bool) string { } evalCtx := p.SCtx().GetExprCtx().GetEvalCtx() - buffer := bytes.NewBufferString(p.JoinType.String()) + buffer := new(strings.Builder) + buffer.WriteString(p.JoinType.String()) + explainJoinLeftSide(buffer, p.JoinType.IsInnerJoin(), normalized, p.Children()[0]) if len(p.LeftJoinKeys) > 0 { fmt.Fprintf(buffer, ", left key:%s", expression.ExplainColumnList(evalCtx, p.LeftJoinKeys)) diff --git a/pkg/planner/core/operator/logicalop/logical_join.go b/pkg/planner/core/operator/logicalop/logical_join.go index 6c7a99b0f7..01efd29f33 100644 --- a/pkg/planner/core/operator/logicalop/logical_join.go +++ b/pkg/planner/core/operator/logicalop/logical_join.go @@ -71,6 +71,11 @@ func (tp JoinType) IsSemiJoin() bool { tp == LeftOuterSemiJoin || tp == AntiLeftOuterSemiJoin } +// IsInnerJoin returns if this joiner is a inner joiner +func (tp JoinType) IsInnerJoin() bool { + return tp == InnerJoin +} + func (tp JoinType) String() string { switch tp { case InnerJoin: diff --git a/pkg/planner/core/testdata/index_merge_suite_out.json b/pkg/planner/core/testdata/index_merge_suite_out.json index 66cc33e82a..72197a2bf4 100644 --- a/pkg/planner/core/testdata/index_merge_suite_out.json +++ b/pkg/planner/core/testdata/index_merge_suite_out.json @@ -189,7 +189,7 @@ "SQL": "select (select /*+ use_index_merge(t1,ia,ibc,ic) */ a from t1 where t1.a > 10 and t1.b = 20 and t1.c = t2.a) from t2", "Plan": [ "Projection 3.00 root test.t1.a", - "└─Apply 3.00 root CARTESIAN left outer join", + "└─Apply 3.00 root CARTESIAN left outer join, left side:IndexReader", " ├─IndexReader(Build) 3.00 root partition:all index:IndexFullScan", " │ └─IndexFullScan 3.00 cop[tikv] table:t2, index:ia(a) keep order:false", " └─MaxOneRow(Probe) 3.00 root ", @@ -208,7 +208,7 @@ "SQL": "select (select /*+ use_index_merge(t1,ia,ibc,ic) */ a from t1 where t1.a > 10 and t1.b = 20 and t1.c > t2.a) from t2", "Plan": [ "Projection 3.00 root test.t1.a", - "└─Apply 3.00 root CARTESIAN left outer join", + "└─Apply 3.00 root CARTESIAN left outer join, left side:IndexReader", " ├─IndexReader(Build) 3.00 root partition:all index:IndexFullScan", " │ └─IndexFullScan 3.00 cop[tikv] table:t2, index:ia(a) keep order:false", " └─MaxOneRow(Probe) 3.00 root ", @@ -228,7 +228,7 @@ "SQL": "select (select /*+ use_index_merge(t1,ia,ibc,ic) */ a from t1 where t1.a > 10 and t1.b = 20 and t1.e > t2.a) from t2", "Plan": [ "Projection 3.00 root test.t1.a", - "└─Apply 3.00 root CARTESIAN left outer join", + "└─Apply 3.00 root CARTESIAN left outer join, left side:IndexReader", " ├─IndexReader(Build) 3.00 root partition:all index:IndexFullScan", " │ └─IndexFullScan 3.00 cop[tikv] table:t2, index:ia(a) keep order:false", " └─MaxOneRow(Probe) 3.00 root ", diff --git a/pkg/planner/core/testdata/runtime_filter_generator_suite_out.json b/pkg/planner/core/testdata/runtime_filter_generator_suite_out.json index 8f2e1b6518..161f12ca42 100644 --- a/pkg/planner/core/testdata/runtime_filter_generator_suite_out.json +++ b/pkg/planner/core/testdata/runtime_filter_generator_suite_out.json @@ -154,7 +154,7 @@ "Plan": [ "TableReader 1.00 root MppVersion: 2, data:ExchangeSender", "└─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin 1.00 mpp[tiflash] right outer join, equal:[eq(test.t1.k1, test.t2.k1)]", + " └─HashJoin 1.00 mpp[tiflash] right outer join, left side:ExchangeReceiver, equal:[eq(test.t1.k1, test.t2.k1)]", " ├─ExchangeReceiver(Build) 1.00 mpp[tiflash] ", " │ └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection 1.00 mpp[tiflash] not(isnull(test.t1.k1))", diff --git a/pkg/planner/core/tests/redact/redact_test.go b/pkg/planner/core/tests/redact/redact_test.go index ef267baa9a..9d8f29985b 100644 --- a/pkg/planner/core/tests/redact/redact_test.go +++ b/pkg/planner/core/tests/redact/redact_test.go @@ -44,7 +44,7 @@ func TestRedactExplain(t *testing.T) { tk.MustQuery("explain select 1 from t left join tlist on tlist.a=t.a where t.a in (12, 13)"). Check(testkit.Rows( "Projection_7 2.50 root ‹1›->Column#5", - "└─HashJoin_9 2.50 root left outer join, equal:[eq(test.t.a, test.tlist.a)]", + "└─HashJoin_9 2.50 root left outer join, left side:Batch_Point_Get_10, equal:[eq(test.t.a, test.tlist.a)]", " ├─Batch_Point_Get_10(Build) 2.00 root table:t handle:[12 13], keep order:false, desc:false", " └─TableReader_13(Probe) 20.00 root partition:dual data:Selection_12", " └─Selection_12 20.00 cop[tikv] in(test.tlist.a, ‹12›, ‹13›), not(isnull(test.tlist.a))", @@ -117,7 +117,7 @@ func TestRedactExplain(t *testing.T) { tk.MustQuery("explain select 1 from t left join tlist on tlist.a=t.a where t.a in (12, 13)"). Check(testkit.Rows( "Projection_7 2.50 root ?->Column#5", - "└─HashJoin_9 2.50 root left outer join, equal:[eq(test.t.a, test.tlist.a)]", + "└─HashJoin_9 2.50 root left outer join, left side:Batch_Point_Get_10, equal:[eq(test.t.a, test.tlist.a)]", " ├─Batch_Point_Get_10(Build) 2.00 root table:t handle:[12 13], keep order:false, desc:false", " └─TableReader_13(Probe) 20.00 root partition:dual data:Selection_12", " └─Selection_12 20.00 cop[tikv] in(test.tlist.a, ?, ?), not(isnull(test.tlist.a))", @@ -220,14 +220,14 @@ func TestJoinNotSupportedByTiFlash(t *testing.T) { tk.MustExec("admin reload expr_pushdown_blacklist;") tk.MustExec("set session tidb_redact_log=ON") tk.MustQuery("explain format = 'brief' select * from table_1 a left join table_1 b on a.id = b.id and dayofmonth(a.datetime_col) > 100").Check(testkit.Rows( - "MergeJoin 2.00 root left outer join, left key:test.table_1.id, right key:test.table_1.id, left cond:gt(dayofmonth(test.table_1.datetime_col), ?)", + "MergeJoin 2.00 root left outer join, left side:IndexReader, left key:test.table_1.id, right key:test.table_1.id, left cond:gt(dayofmonth(test.table_1.datetime_col), ?)", "├─IndexReader(Build) 2.00 root index:IndexFullScan", "│ └─IndexFullScan 2.00 cop[tikv] table:b, index:idx(id, bit_col, datetime_col) keep order:true", "└─IndexReader(Probe) 2.00 root index:IndexFullScan", " └─IndexFullScan 2.00 cop[tikv] table:a, index:idx(id, bit_col, datetime_col) keep order:true")) tk.MustExec("set session tidb_redact_log=MARKER") tk.MustQuery("explain format = 'brief' select * from table_1 a left join table_1 b on a.id = b.id and dayofmonth(a.datetime_col) > 100").Check(testkit.Rows( - "MergeJoin 2.00 root left outer join, left key:test.table_1.id, right key:test.table_1.id, left cond:gt(dayofmonth(test.table_1.datetime_col), ‹100›)", + "MergeJoin 2.00 root left outer join, left side:IndexReader, left key:test.table_1.id, right key:test.table_1.id, left cond:gt(dayofmonth(test.table_1.datetime_col), ‹100›)", "├─IndexReader(Build) 2.00 root index:IndexFullScan", "│ └─IndexFullScan 2.00 cop[tikv] table:b, index:idx(id, bit_col, datetime_col) keep order:true", "└─IndexReader(Probe) 2.00 root index:IndexFullScan", diff --git a/pkg/util/execdetails/execdetails.go b/pkg/util/execdetails/execdetails.go index 97c08d4676..5236c92532 100644 --- a/pkg/util/execdetails/execdetails.go +++ b/pkg/util/execdetails/execdetails.go @@ -1431,14 +1431,10 @@ func (e *BasicRuntimeStats) String() string { closeTime := e.close.Load() str.WriteString(fmt.Sprintf("%stime:", timePrefix)) str.WriteString(FormatDuration(time.Duration(totalTime))) - if openTime >= int64(time.Millisecond) { - str.WriteString(fmt.Sprintf(", %sopen:", timePrefix)) - str.WriteString(FormatDuration(time.Duration(openTime))) - } - if closeTime >= int64(time.Millisecond) { - str.WriteString(fmt.Sprintf(", %sclose:", timePrefix)) - str.WriteString(FormatDuration(time.Duration(closeTime))) - } + str.WriteString(fmt.Sprintf(", %sopen:", timePrefix)) + str.WriteString(FormatDuration(time.Duration(openTime))) + str.WriteString(fmt.Sprintf(", %sclose:", timePrefix)) + str.WriteString(FormatDuration(time.Duration(closeTime))) str.WriteString(", loops:") str.WriteString(strconv.FormatInt(int64(e.loop.Load()), 10)) return str.String() diff --git a/tests/integrationtest/r/bindinfo/bind.result b/tests/integrationtest/r/bindinfo/bind.result index e574970576..a3ec605d8b 100644 --- a/tests/integrationtest/r/bindinfo/bind.result +++ b/tests/integrationtest/r/bindinfo/bind.result @@ -131,7 +131,7 @@ create table t1(id int); create table t2(id int); explain format='brief' select * from t1 where exists(select 1 from t2 where t1.id=t2.id); id estRows task access object operator info -HashJoin 7992.00 root semi join, equal:[eq(bindinfo__bind.t1.id, bindinfo__bind.t2.id)] +HashJoin 7992.00 root semi join, left side:TableReader, equal:[eq(bindinfo__bind.t1.id, bindinfo__bind.t2.id)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(bindinfo__bind.t2.id)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -203,7 +203,7 @@ create table t1(a int, b int); create table t2(a int, b int); explain format='brief' select exists (select t2.b from t2 where t2.a = t1.b limit 2) from t1; id estRows task access object operator info -HashJoin 10000.00 root left outer semi join, equal:[eq(bindinfo__bind.t1.b, bindinfo__bind.t2.a)] +HashJoin 10000.00 root left outer semi join, left side:TableReader, equal:[eq(bindinfo__bind.t1.b, bindinfo__bind.t2.a)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -211,7 +211,7 @@ HashJoin 10000.00 root left outer semi join, equal:[eq(bindinfo__bind.t1.b, bin explain format='brief' select exists (select /*+ no_decorrelate() */ t2.b from t2 where t2.a = t1.b limit 2) from t1; id estRows task access object operator info Projection 10000.00 root Column#10 -└─Apply 10000.00 root CARTESIAN left outer semi join +└─Apply 10000.00 root CARTESIAN left outer semi join, left side:TableReader ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─Limit(Probe) 20000.00 root offset:0, count:2 @@ -226,7 +226,7 @@ select exists (select /*+ no_decorrelate() */ t2.b from t2 where t2.a = t1.b lim explain format='brief' select exists (select t2.b from t2 where t2.a = t1.b limit 2) from t1; id estRows task access object operator info Projection 10000.00 root Column#10 -└─Apply 10000.00 root CARTESIAN left outer semi join +└─Apply 10000.00 root CARTESIAN left outer semi join, left side:TableReader ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─Limit(Probe) 20000.00 root offset:0, count:2 diff --git a/tests/integrationtest/r/clustered_index.result b/tests/integrationtest/r/clustered_index.result index 8e66645993..da3dffed1e 100644 --- a/tests/integrationtest/r/clustered_index.result +++ b/tests/integrationtest/r/clustered_index.result @@ -79,14 +79,14 @@ IndexReader_8 1860.39 root index:IndexRangeScan_7 └─IndexRangeScan_7 1860.39 cop[tikv] table:tbl_0, index:idx_1(col_3) range:[1981-09-15 00:00:00,+inf], keep order:false explain select tbl_2.col_14 , tbl_0.col_1 from with_cluster_index.tbl_2 right join with_cluster_index.tbl_0 on col_3 = col_11 ; id estRows task access object operator info -MergeJoin_7 2533.51 root right outer join, left key:with_cluster_index.tbl_2.col_11, right key:with_cluster_index.tbl_0.col_3 +MergeJoin_7 2533.51 root right outer join, left side:IndexReader_22, left key:with_cluster_index.tbl_2.col_11, right key:with_cluster_index.tbl_0.col_3 ├─IndexReader_22(Build) 4509.00 root index:IndexFullScan_21 │ └─IndexFullScan_21 4509.00 cop[tikv] table:tbl_2, index:idx_9(col_11) keep order:true └─TableReader_24(Probe) 2244.00 root data:TableFullScan_23 └─TableFullScan_23 2244.00 cop[tikv] table:tbl_0 keep order:true explain select tbl_2.col_14 , tbl_0.col_1 from wout_cluster_index.tbl_2 right join wout_cluster_index.tbl_0 on col_3 = col_11 ; id estRows task access object operator info -HashJoin_22 2533.51 root right outer join, equal:[eq(wout_cluster_index.tbl_2.col_11, wout_cluster_index.tbl_0.col_3)] +HashJoin_22 2533.51 root right outer join, left side:TableReader_44, equal:[eq(wout_cluster_index.tbl_2.col_11, wout_cluster_index.tbl_0.col_3)] ├─TableReader_41(Build) 2244.00 root data:TableFullScan_40 │ └─TableFullScan_40 2244.00 cop[tikv] table:tbl_0 keep order:false └─TableReader_44(Probe) 4509.00 root data:Selection_43 diff --git a/tests/integrationtest/r/cte.result b/tests/integrationtest/r/cte.result index 77e2da6a50..1c9505bae8 100644 --- a/tests/integrationtest/r/cte.result +++ b/tests/integrationtest/r/cte.result @@ -581,7 +581,7 @@ c1 c2 insert into t1 values(2, 3); explain select * from t1 where exists(with cte1 as (select c1 from t2 where t2.c2 = t1.c2) select c1 from cte1); id estRows task access object operator info -HashJoin_14 7992.00 root semi join, equal:[eq(cte.t1.c2, cte.t2.c2)] +HashJoin_14 7992.00 root semi join, left side:TableReader_17, equal:[eq(cte.t1.c2, cte.t2.c2)] ├─TableReader_20(Build) 9990.00 root data:Selection_19 │ └─Selection_19 9990.00 cop[tikv] not(isnull(cte.t2.c2)) │ └─TableFullScan_18 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -615,7 +615,7 @@ c1 c2 2 3 explain select * from t1 where exists(with recursive cte1 as (select c1 from t2 where t2.c2 = t1.c2 union all select c1+1 as c1 from cte1 limit 10) select c1 from cte1); id estRows task access object operator info -Apply_29 10000.00 root CARTESIAN semi join +Apply_29 10000.00 root CARTESIAN semi join, left side:TableReader_31 ├─TableReader_31(Build) 10000.00 root data:TableFullScan_30 │ └─TableFullScan_30 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─CTEFullScan_32(Probe) 200000.00 root CTE:cte1 data:CTE_0 @@ -650,7 +650,7 @@ select * from t1 where c1 > all(with recursive cte1 as (select c1, c2 from t2 un c1 c2 explain select * from t1 where exists(with recursive cte1 as (select c1, c2 from t2 union all select c1+1 as c1, c2+1 as c2 from cte1 where cte1.c2=t1.c2) select c1 from cte1); id estRows task access object operator info -Apply_23 10000.00 root CARTESIAN semi join +Apply_23 10000.00 root CARTESIAN semi join, left side:TableReader_25 ├─TableReader_25(Build) 10000.00 root data:TableFullScan_24 │ └─TableFullScan_24 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─CTEFullScan_26(Probe) 180000000.00 root CTE:cte1 data:CTE_0 @@ -779,7 +779,7 @@ insert into tt5 values(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6); explain with recursive cte1 as (select c1 from tt union select c1 from cte1 where exists (select /*+ no_decorrelate() */ c1 from tt1 where tt1.c2 = cte1.c1)) select c1 from tt2 where exists (select /*+ no_decorrelate() */ * from cte1 where cte1.c1 = tt2.c1) order by 1; id estRows task access object operator info Sort_31 10000.00 root cte1.tt2.c1 -└─Apply_35 10000.00 root CARTESIAN semi join +└─Apply_35 10000.00 root CARTESIAN semi join, left side:TableReader_37 ├─TableReader_37(Build) 10000.00 root data:TableFullScan_36 │ └─TableFullScan_36 10000.00 cop[tikv] table:tt2 keep order:false, stats:pseudo └─Selection_38(Probe) 64008000.00 root eq(cte1.tt.c1, cte1.tt2.c1) @@ -787,7 +787,7 @@ Sort_31 10000.00 root cte1.tt2.c1 CTE_0 8001.00 root Recursive CTE ├─TableReader_23(Seed Part) 10000.00 root data:TableFullScan_22 │ └─TableFullScan_22 10000.00 cop[tikv] table:tt keep order:false, stats:pseudo -└─Apply_26(Recursive Part) 10000.00 root CARTESIAN semi join +└─Apply_26(Recursive Part) 10000.00 root CARTESIAN semi join, left side:CTETable_27 ├─CTETable_27(Build) 10000.00 root Scan on CTE_0 └─TableReader_30(Probe) 100000.00 root data:Selection_29 └─Selection_29 100000.00 cop[tikv] eq(cte1.tt1.c2, cte1.tt.c1) @@ -807,22 +807,22 @@ id estRows task access object operator info Sort_58 32000.00 root Column#28 └─HashAgg_60 32000.00 root group by:Column#28, funcs:firstrow(Column#28)->Column#28 └─Union_61 40000.00 root - ├─Apply_64 10000.00 root CARTESIAN semi join + ├─Apply_64 10000.00 root CARTESIAN semi join, left side:TableReader_66 │ ├─TableReader_66(Build) 10000.00 root data:TableFullScan_65 │ │ └─TableFullScan_65 10000.00 cop[tikv] table:tt2 keep order:false, stats:pseudo │ └─Selection_67(Probe) 64008000.00 root eq(cte1.tt.c1, cte1.tt2.c1) │ └─CTEFullScan_68 80010000.00 root CTE:cte1 data:CTE_0 - ├─Apply_71 10000.00 root CARTESIAN semi join + ├─Apply_71 10000.00 root CARTESIAN semi join, left side:TableReader_73 │ ├─TableReader_73(Build) 10000.00 root data:TableFullScan_72 │ │ └─TableFullScan_72 10000.00 cop[tikv] table:tt3 keep order:false, stats:pseudo │ └─Selection_74(Probe) 64008000.00 root eq(cte1.tt.c1, cte1.tt3.c1) │ └─CTEFullScan_75 80010000.00 root CTE:cte1 data:CTE_0 - ├─Apply_78 10000.00 root CARTESIAN semi join + ├─Apply_78 10000.00 root CARTESIAN semi join, left side:TableReader_80 │ ├─TableReader_80(Build) 10000.00 root data:TableFullScan_79 │ │ └─TableFullScan_79 10000.00 cop[tikv] table:tt4 keep order:false, stats:pseudo │ └─Selection_81(Probe) 64008000.00 root eq(cte1.tt.c1, cte1.tt4.c1) │ └─CTEFullScan_82 80010000.00 root CTE:cte1 data:CTE_0 - └─Apply_85 10000.00 root CARTESIAN semi join + └─Apply_85 10000.00 root CARTESIAN semi join, left side:TableReader_87 ├─TableReader_87(Build) 10000.00 root data:TableFullScan_86 │ └─TableFullScan_86 10000.00 cop[tikv] table:tt5 keep order:false, stats:pseudo └─Selection_88(Probe) 64008000.00 root eq(cte1.tt.c1, cte1.tt5.c1) @@ -830,7 +830,7 @@ Sort_58 32000.00 root Column#28 CTE_0 8001.00 root Recursive CTE ├─TableReader_50(Seed Part) 10000.00 root data:TableFullScan_49 │ └─TableFullScan_49 10000.00 cop[tikv] table:tt keep order:false, stats:pseudo -└─Apply_53(Recursive Part) 10000.00 root CARTESIAN semi join +└─Apply_53(Recursive Part) 10000.00 root CARTESIAN semi join, left side:CTETable_54 ├─CTETable_54(Build) 10000.00 root Scan on CTE_0 └─TableReader_57(Probe) 100000.00 root data:Selection_56 └─Selection_56 100000.00 cop[tikv] eq(cte1.tt1.c2, cte1.tt.c1) @@ -853,22 +853,22 @@ id estRows task access object operator info Sort_85 32000.00 root Column#36 └─HashAgg_87 32000.00 root group by:Column#36, funcs:firstrow(Column#36)->Column#36 └─Union_88 40000.00 root - ├─Apply_91 10000.00 root CARTESIAN semi join + ├─Apply_91 10000.00 root CARTESIAN semi join, left side:TableReader_93 │ ├─TableReader_93(Build) 10000.00 root data:TableFullScan_92 │ │ └─TableFullScan_92 10000.00 cop[tikv] table:tt2 keep order:false, stats:pseudo │ └─Selection_94(Probe) 128008000.00 root eq(Column#23, cte1.tt2.c1) │ └─CTEFullScan_95 160010000.00 root CTE:cte1 data:CTE_0 - ├─Apply_98 10000.00 root CARTESIAN semi join + ├─Apply_98 10000.00 root CARTESIAN semi join, left side:TableReader_100 │ ├─TableReader_100(Build) 10000.00 root data:TableFullScan_99 │ │ └─TableFullScan_99 10000.00 cop[tikv] table:tt3 keep order:false, stats:pseudo │ └─Selection_101(Probe) 128008000.00 root eq(Column#27, cte1.tt3.c1) │ └─CTEFullScan_102 160010000.00 root CTE:cte1 data:CTE_0 - ├─Apply_105 10000.00 root CARTESIAN semi join + ├─Apply_105 10000.00 root CARTESIAN semi join, left side:TableReader_107 │ ├─TableReader_107(Build) 10000.00 root data:TableFullScan_106 │ │ └─TableFullScan_106 10000.00 cop[tikv] table:tt4 keep order:false, stats:pseudo │ └─Selection_108(Probe) 128008000.00 root eq(Column#31, cte1.tt4.c1) │ └─CTEFullScan_109 160010000.00 root CTE:cte1 data:CTE_0 - └─Apply_112 10000.00 root CARTESIAN semi join + └─Apply_112 10000.00 root CARTESIAN semi join, left side:TableReader_114 ├─TableReader_114(Build) 10000.00 root data:TableFullScan_113 │ └─TableFullScan_113 10000.00 cop[tikv] table:tt5 keep order:false, stats:pseudo └─Selection_115(Probe) 128008000.00 root eq(Column#35, cte1.tt5.c1) @@ -878,7 +878,7 @@ CTE_0 16001.00 root Non-Recursive CTE └─Union_74 30000.00 root ├─TableReader_77 10000.00 root data:TableFullScan_76 │ └─TableFullScan_76 10000.00 cop[tikv] table:tt keep order:false, stats:pseudo - └─Apply_80 20000.00 root CARTESIAN semi join + └─Apply_80 20000.00 root CARTESIAN semi join, left side:CTEFullScan_81 ├─CTEFullScan_81(Build) 20000.00 root CTE:cte2 data:CTE_1 └─TableReader_84(Probe) 200000.00 root data:Selection_83 └─Selection_83 200000.00 cop[tikv] eq(cte1.tt1.c2, cte1.tt.c1) @@ -886,7 +886,7 @@ CTE_0 16001.00 root Non-Recursive CTE CTE_1 20000.00 root Recursive CTE, limit(offset:0, count:300) ├─TableReader_65(Seed Part) 10000.00 root data:TableFullScan_64 │ └─TableFullScan_64 10000.00 cop[tikv] table:tt keep order:false, stats:pseudo -└─Apply_68(Recursive Part) 10000.00 root CARTESIAN semi join +└─Apply_68(Recursive Part) 10000.00 root CARTESIAN semi join, left side:CTETable_69 ├─CTETable_69(Build) 10000.00 root Scan on CTE_1 └─TableReader_72(Probe) 100000.00 root data:Selection_71 └─Selection_71 100000.00 cop[tikv] eq(cte1.tt1.c1, cte1.tt.c1) @@ -1125,27 +1125,27 @@ Union_210 199600.20 root └─CTEFullScan_214 99800.10 root CTE:product_detail data:CTE_4 CTE_4 99800.10 root Non-Recursive CTE └─Projection_172(Seed Part) 99800.10 root cte1.table_c.col_4, 3集合->Column#413 - └─HashJoin_188 99800.10 root left outer join, equal:[eq(cte1.table_c.col_4, cte1.table_c.col_4) eq(Column#390, cte1.table_c.col_1)] + └─HashJoin_188 99800.10 root left outer join, left side:HashJoin_190, equal:[eq(cte1.table_c.col_4, cte1.table_c.col_4) eq(Column#390, cte1.table_c.col_1)] ├─TableReader_204(Build) 9980.01 root data:Selection_203 │ └─Selection_203 9980.01 cop[tikv] not(isnull(cte1.table_c.col_1)), not(isnull(cte1.table_c.col_4)) │ └─TableFullScan_202 10000.00 cop[tikv] table:a keep order:false, stats:pseudo - └─HashJoin_190(Probe) 80000.00 root CARTESIAN left outer join + └─HashJoin_190(Probe) 80000.00 root CARTESIAN left outer join, left side:HashAgg_196 ├─CTEFullScan_200(Build) 10.00 root CTE:date_table AS dt data:CTE_0 └─HashAgg_196(Probe) 8000.00 root group by:cte1.table_c.col_3, cte1.table_c.col_4, funcs:firstrow(cte1.table_c.col_4)->cte1.table_c.col_4 └─TableReader_197 8000.00 root data:HashAgg_192 └─HashAgg_192 8000.00 cop[tikv] group by:cte1.table_c.col_3, cte1.table_c.col_4, └─TableFullScan_195 10000.00 cop[tikv] table:t keep order:false, stats:pseudo CTE_0 10.00 root Non-Recursive CTE -└─Apply_95(Seed Part) 10.00 root CARTESIAN left outer join - ├─Apply_97(Build) 10.00 root CARTESIAN left outer join - │ ├─Apply_99(Build) 10.00 root CARTESIAN left outer join - │ │ ├─Apply_101(Build) 10.00 root CARTESIAN left outer join +└─Apply_95(Seed Part) 10.00 root CARTESIAN left outer join, left side:Apply_97 + ├─Apply_97(Build) 10.00 root CARTESIAN left outer join, left side:Apply_99 + │ ├─Apply_99(Build) 10.00 root CARTESIAN left outer join, left side:Apply_101 + │ │ ├─Apply_101(Build) 10.00 root CARTESIAN left outer join, left side:TableReader_104 │ │ │ ├─TableReader_104(Build) 10.00 root data:Selection_103 │ │ │ │ └─Selection_103 10.00 cop[tikv] eq(cte1.table_d.col_1, 20240628) │ │ │ │ └─TableFullScan_102 10000.00 cop[tikv] table:d keep order:false, stats:pseudo │ │ │ └─StreamAgg_106(Probe) 10.00 root funcs:max(cte1.table_c.col_1)->Column#159 │ │ │ └─TopN_109 10.00 root cte1.table_c.col_1:desc, offset:0, count:1 - │ │ │ └─HashJoin_114 63936.00 root semi join, equal:[eq(Column#423, Column#424)] + │ │ │ └─HashJoin_114 63936.00 root semi join, left side:Projection_115, equal:[eq(Column#423, Column#424)] │ │ │ ├─Projection_119(Build) 80000.00 root cast(cte1.table_d.col_1, double BINARY)->Column#424 │ │ │ │ └─TableReader_122 80000.00 root data:Selection_121 │ │ │ │ └─Selection_121 80000.00 cop[tikv] eq(cast(cte1.table_d.col_2, double BINARY), 1) @@ -1156,7 +1156,7 @@ CTE_0 10.00 root Non-Recursive CTE │ │ │ └─IndexFullScan_116 99900.00 cop[tikv] table:a, index:index_col_1_3(col_1, col_3) keep order:false, stats:pseudo │ │ └─StreamAgg_124(Probe) 10.00 root funcs:max(cte1.table_a.col_1)->Column#208 │ │ └─TopN_127 10.00 root cte1.table_a.col_1:desc, offset:0, count:1 - │ │ └─HashJoin_132 63936.00 root semi join, equal:[eq(Column#429, Column#430)] + │ │ └─HashJoin_132 63936.00 root semi join, left side:Projection_133, equal:[eq(Column#429, Column#430)] │ │ ├─Projection_137(Build) 80000.00 root cast(cte1.table_d.col_1, double BINARY)->Column#430 │ │ │ └─TableReader_140 80000.00 root data:Selection_139 │ │ │ └─Selection_139 80000.00 cop[tikv] eq(cast(cte1.table_d.col_2, double BINARY), 1) diff --git a/tests/integrationtest/r/executor/aggregate.result b/tests/integrationtest/r/executor/aggregate.result index ebd58e4975..4de3e447d9 100644 --- a/tests/integrationtest/r/executor/aggregate.result +++ b/tests/integrationtest/r/executor/aggregate.result @@ -544,7 +544,7 @@ explain format='brief' SELECT /*+ hash_join_build(customer) */ c_custkey, count id estRows task access object operator info Projection 8000.00 root executor__aggregate.customer.c_custkey, Column#18 └─HashAgg 8000.00 root group by:executor__aggregate.customer.c_custkey, funcs:count(Column#19)->Column#18, funcs:firstrow(executor__aggregate.customer.c_custkey)->executor__aggregate.customer.c_custkey - └─HashJoin 10000.00 root left outer join, equal:[eq(executor__aggregate.customer.c_custkey, executor__aggregate.orders.o_custkey)] + └─HashJoin 10000.00 root left outer join, left side:TableReader, equal:[eq(executor__aggregate.customer.c_custkey, executor__aggregate.orders.o_custkey)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:customer keep order:false, stats:pseudo └─HashAgg(Probe) 6400.00 root group by:executor__aggregate.orders.o_custkey, funcs:count(Column#20)->Column#19, funcs:firstrow(executor__aggregate.orders.o_custkey)->executor__aggregate.orders.o_custkey @@ -2032,9 +2032,9 @@ sum(a) (select NULL from test where tt.a = test.a limit 1) (select NULL from tes explain format = 'brief' select /*+ hash_agg() */ sum(a), (select NULL from test where tt.a = test.a limit 1),(select NULL from test where tt.a = test.a limit 1),(select NULL from test where tt.a = test.a limit 1) from test tt; id estRows task access object operator info Projection 1.00 root Column#9, Column#12, Column#15, Column#18 -└─Apply 1.00 root CARTESIAN left outer join - ├─Apply(Build) 1.00 root CARTESIAN left outer join - │ ├─Apply(Build) 1.00 root CARTESIAN left outer join +└─Apply 1.00 root CARTESIAN left outer join, left side:Apply + ├─Apply(Build) 1.00 root CARTESIAN left outer join, left side:Apply + │ ├─Apply(Build) 1.00 root CARTESIAN left outer join, left side:HashAgg │ │ ├─HashAgg(Build) 1.00 root funcs:sum(Column#28)->Column#9, funcs:firstrow(Column#29)->executor__aggregate.test.a │ │ │ └─Projection 10000.00 root cast(executor__aggregate.test.a, decimal(10,0) BINARY)->Column#28, executor__aggregate.test.a->Column#29 │ │ │ └─TableReader 10000.00 root data:TableFullScan diff --git a/tests/integrationtest/r/executor/executor.result b/tests/integrationtest/r/executor/executor.result index f97e6126bd..f998336193 100644 --- a/tests/integrationtest/r/executor/executor.result +++ b/tests/integrationtest/r/executor/executor.result @@ -2633,7 +2633,7 @@ NULL 3 3 3 explain format = 'brief' select * from t1 except select * from t3; id estRows task access object operator info -HashJoin 6400.00 root anti semi join, equal:[nulleq(executor__executor.t1.a, executor__executor.t3.a)], other cond:nulleq(cast(executor__executor.t1.b, decimal(10,0) BINARY), executor__executor.t3.b) +HashJoin 6400.00 root anti semi join, left side:HashAgg, equal:[nulleq(executor__executor.t1.a, executor__executor.t3.a)], other cond:nulleq(cast(executor__executor.t1.b, decimal(10,0) BINARY), executor__executor.t3.b) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo └─HashAgg(Probe) 8000.00 root group by:executor__executor.t1.a, executor__executor.t1.b, funcs:firstrow(executor__executor.t1.a)->executor__executor.t1.a, funcs:firstrow(executor__executor.t1.b)->executor__executor.t1.b @@ -2647,7 +2647,7 @@ NULL NULL 2 2 explain format = 'brief' select * from t1 intersect select * from t2; id estRows task access object operator info -HashJoin 6400.00 root semi join, equal:[nulleq(executor__executor.t1.a, executor__executor.t2.a)], other cond:nulleq(cast(executor__executor.t1.b, double BINARY), cast(executor__executor.t2.b, double BINARY)) +HashJoin 6400.00 root semi join, left side:HashAgg, equal:[nulleq(executor__executor.t1.a, executor__executor.t2.a)], other cond:nulleq(cast(executor__executor.t1.b, double BINARY), cast(executor__executor.t2.b, double BINARY)) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─HashAgg(Probe) 8000.00 root group by:executor__executor.t1.a, executor__executor.t1.b, funcs:firstrow(executor__executor.t1.a)->executor__executor.t1.a, funcs:firstrow(executor__executor.t1.b)->executor__executor.t1.b @@ -2686,7 +2686,7 @@ NULL 3 3 3.0000000000 explain format = 'brief' select * from t1 union all select * from t2 except select * from t3; id estRows task access object operator info -HashJoin 12800.00 root anti semi join, equal:[nulleq(Column#10, executor__executor.t3.a)], other cond:nulleq(cast(Column#11, double BINARY), cast(executor__executor.t3.b, double BINARY)) +HashJoin 12800.00 root anti semi join, left side:HashAgg, equal:[nulleq(Column#10, executor__executor.t3.a)], other cond:nulleq(cast(Column#11, double BINARY), cast(executor__executor.t3.b, double BINARY)) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo └─HashAgg(Probe) 16000.00 root group by:Column#10, Column#11, funcs:firstrow(Column#10)->Column#10, funcs:firstrow(Column#11)->Column#11 @@ -2704,10 +2704,10 @@ NULL 3 2 2 explain format = 'brief' select * from t1 intersect select * from t2 intersect select * from t1; id estRows task access object operator info -HashJoin 5120.00 root semi join, equal:[nulleq(executor__executor.t1.a, executor__executor.t1.a) nulleq(executor__executor.t1.b, executor__executor.t1.b)] +HashJoin 5120.00 root semi join, left side:HashJoin, equal:[nulleq(executor__executor.t1.a, executor__executor.t1.a) nulleq(executor__executor.t1.b, executor__executor.t1.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo -└─HashJoin(Probe) 6400.00 root semi join, equal:[nulleq(executor__executor.t1.a, executor__executor.t2.a)], other cond:nulleq(cast(executor__executor.t1.b, double BINARY), cast(executor__executor.t2.b, double BINARY)) +└─HashJoin(Probe) 6400.00 root semi join, left side:HashAgg, equal:[nulleq(executor__executor.t1.a, executor__executor.t2.a)], other cond:nulleq(cast(executor__executor.t1.b, double BINARY), cast(executor__executor.t2.b, double BINARY)) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─HashAgg(Probe) 8000.00 root group by:executor__executor.t1.a, executor__executor.t1.b, funcs:firstrow(executor__executor.t1.a)->executor__executor.t1.a, funcs:firstrow(executor__executor.t1.b)->executor__executor.t1.b @@ -2725,7 +2725,7 @@ Union 16400.00 root ├─Projection 10000.00 root executor__executor.t1.a->Column#10, cast(executor__executor.t1.b, varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#11 │ └─TableReader 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo -└─HashJoin 6400.00 root semi join, equal:[nulleq(executor__executor.t2.a, executor__executor.t3.a)], other cond:nulleq(cast(executor__executor.t2.b, double BINARY), cast(executor__executor.t3.b, double BINARY)) +└─HashJoin 6400.00 root semi join, left side:HashAgg, equal:[nulleq(executor__executor.t2.a, executor__executor.t3.a)], other cond:nulleq(cast(executor__executor.t2.b, double BINARY), cast(executor__executor.t3.b, double BINARY)) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo └─HashAgg(Probe) 8000.00 root group by:executor__executor.t2.a, executor__executor.t2.b, funcs:firstrow(executor__executor.t2.a)->executor__executor.t2.a, funcs:firstrow(executor__executor.t2.b)->executor__executor.t2.b @@ -2741,8 +2741,8 @@ NULL NULL 3 3 explain format = 'brief' select * from t1 except select * from t2 intersect select * from t3; id estRows task access object operator info -HashJoin 6400.00 root anti semi join, equal:[nulleq(executor__executor.t1.a, executor__executor.t2.a)], other cond:nulleq(cast(executor__executor.t1.b, double BINARY), cast(executor__executor.t2.b, double BINARY)) -├─HashJoin(Build) 6400.00 root semi join, equal:[nulleq(executor__executor.t2.a, executor__executor.t3.a)], other cond:nulleq(cast(executor__executor.t2.b, double BINARY), cast(executor__executor.t3.b, double BINARY)) +HashJoin 6400.00 root anti semi join, left side:HashAgg, equal:[nulleq(executor__executor.t1.a, executor__executor.t2.a)], other cond:nulleq(cast(executor__executor.t1.b, double BINARY), cast(executor__executor.t2.b, double BINARY)) +├─HashJoin(Build) 6400.00 root semi join, left side:HashAgg, equal:[nulleq(executor__executor.t2.a, executor__executor.t3.a)], other cond:nulleq(cast(executor__executor.t2.b, double BINARY), cast(executor__executor.t3.b, double BINARY)) │ ├─TableReader(Build) 10000.00 root data:TableFullScan │ │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo │ └─HashAgg(Probe) 8000.00 root group by:executor__executor.t2.a, executor__executor.t2.b, funcs:firstrow(executor__executor.t2.a)->executor__executor.t2.a, funcs:firstrow(executor__executor.t2.b)->executor__executor.t2.b @@ -2788,14 +2788,14 @@ count(*) 0 explain format = 'brief' select t1.c1, t2.c1 from t as t1 left join t as t2 on t1.c1 = t2.c1 where t1.c1 != NULL; id estRows task access object operator info -MergeJoin 0.00 root left outer join, left key:executor__executor.t.c1, right key:executor__executor.t.c1 +MergeJoin 0.00 root left outer join, left side:TableDual, left key:executor__executor.t.c1, right key:executor__executor.t.c1 ├─TableDual(Build) 0.00 root rows:0 └─TableDual(Probe) 0.00 root rows:0 select t1.c1, t2.c1 from t as t1 left join t as t2 on t1.c1 = t2.c1 where t1.c1 != NULL; c1 c1 explain format = 'brief' select * from t as t1 left join t as t2 on t1.c1 = t2.c1 where t1.c1 != NULL; id estRows task access object operator info -MergeJoin 0.00 root left outer join, left key:executor__executor.t.c1, right key:executor__executor.t.c1 +MergeJoin 0.00 root left outer join, left side:TableDual, left key:executor__executor.t.c1, right key:executor__executor.t.c1 ├─TableDual(Build) 0.00 root rows:0 └─TableDual(Probe) 0.00 root rows:0 select * from t as t1 left join t as t2 on t1.c1 = t2.c1 where t1.c1 != NULL; @@ -2803,7 +2803,7 @@ c1 c2 c1 c2 explain format = 'brief' select count(*) from t as t1 left join t as t2 on t1.c1 = t2.c1 where t1.c1 != NULL; id estRows task access object operator info StreamAgg 1.00 root funcs:count(1)->Column#7 -└─MergeJoin 0.00 root left outer join, left key:executor__executor.t.c1, right key:executor__executor.t.c1 +└─MergeJoin 0.00 root left outer join, left side:TableDual, left key:executor__executor.t.c1, right key:executor__executor.t.c1 ├─TableDual(Build) 0.00 root rows:0 └─TableDual(Probe) 0.00 root rows:0 select count(*) from t as t1 left join t as t2 on t1.c1 = t2.c1 where t1.c1 != NULL; @@ -2811,7 +2811,7 @@ count(*) 0 explain format = 'brief' select * from t as t1 left join t as t2 on t1.c1 = t2.c1 where t1.c1 is not NULL; id estRows task access object operator info -HashJoin 12487.50 root left outer join, equal:[eq(executor__executor.t.c1, executor__executor.t.c1)] +HashJoin 12487.50 root left outer join, left side:TableReader, equal:[eq(executor__executor.t.c1, executor__executor.t.c1)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(executor__executor.t.c1)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -2863,7 +2863,7 @@ NULL 3 explain format='brief' select * from t1 except select * from t3; id estRows task access object operator info -HashJoin 6400.00 root anti semi join, equal:[nulleq(executor__executor.t1.a, executor__executor.t3.a)] +HashJoin 6400.00 root anti semi join, left side:HashAgg, equal:[nulleq(executor__executor.t1.a, executor__executor.t3.a)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo └─HashAgg(Probe) 8000.00 root group by:executor__executor.t1.a, funcs:firstrow(executor__executor.t1.a)->executor__executor.t1.a @@ -2876,7 +2876,7 @@ NULL 1 explain format='brief' select * from t1 intersect select * from t2; id estRows task access object operator info -HashJoin 6400.00 root semi join, equal:[nulleq(executor__executor.t1.a, executor__executor.t2.a)] +HashJoin 6400.00 root semi join, left side:HashAgg, equal:[nulleq(executor__executor.t1.a, executor__executor.t2.a)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─HashAgg(Probe) 8000.00 root group by:executor__executor.t1.a, funcs:firstrow(executor__executor.t1.a)->executor__executor.t1.a @@ -2912,7 +2912,7 @@ NULL 3 explain format='brief' select * from t1 union all select * from t2 except select * from t3; id estRows task access object operator info -HashJoin 12800.00 root anti semi join, equal:[nulleq(Column#7, executor__executor.t3.a)] +HashJoin 12800.00 root anti semi join, left side:HashAgg, equal:[nulleq(Column#7, executor__executor.t3.a)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo └─HashAgg(Probe) 16000.00 root group by:Column#7, funcs:firstrow(Column#7)->Column#7 @@ -2927,10 +2927,10 @@ NULL 1 explain format='brief' select * from t1 intersect select * from t2 intersect select * from t1; id estRows task access object operator info -HashJoin 5120.00 root semi join, equal:[nulleq(executor__executor.t1.a, executor__executor.t1.a)] +HashJoin 5120.00 root semi join, left side:HashJoin, equal:[nulleq(executor__executor.t1.a, executor__executor.t1.a)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo -└─HashJoin(Probe) 6400.00 root semi join, equal:[nulleq(executor__executor.t1.a, executor__executor.t2.a)] +└─HashJoin(Probe) 6400.00 root semi join, left side:HashAgg, equal:[nulleq(executor__executor.t1.a, executor__executor.t2.a)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─HashAgg(Probe) 8000.00 root group by:executor__executor.t1.a, funcs:firstrow(executor__executor.t1.a)->executor__executor.t1.a @@ -2947,7 +2947,7 @@ id estRows task access object operator info Union 16400.00 root ├─TableReader 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo -└─HashJoin 6400.00 root semi join, equal:[nulleq(executor__executor.t2.a, executor__executor.t3.a)] +└─HashJoin 6400.00 root semi join, left side:HashAgg, equal:[nulleq(executor__executor.t2.a, executor__executor.t3.a)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo └─HashAgg(Probe) 8000.00 root group by:executor__executor.t2.a, funcs:firstrow(executor__executor.t2.a)->executor__executor.t2.a @@ -2964,8 +2964,8 @@ NULL 3 explain format='brief' select * from t1 except select * from t2 intersect select * from t3; id estRows task access object operator info -HashJoin 6400.00 root anti semi join, equal:[nulleq(executor__executor.t1.a, executor__executor.t2.a)] -├─HashJoin(Build) 6400.00 root semi join, equal:[nulleq(executor__executor.t2.a, executor__executor.t3.a)] +HashJoin 6400.00 root anti semi join, left side:HashAgg, equal:[nulleq(executor__executor.t1.a, executor__executor.t2.a)] +├─HashJoin(Build) 6400.00 root semi join, left side:HashAgg, equal:[nulleq(executor__executor.t2.a, executor__executor.t3.a)] │ ├─TableReader(Build) 10000.00 root data:TableFullScan │ │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo │ └─HashAgg(Probe) 8000.00 root group by:executor__executor.t2.a, funcs:firstrow(executor__executor.t2.a)->executor__executor.t2.a @@ -2983,8 +2983,8 @@ NULL 3 explain format='brief' select * from t1 intersect (select * from t2 except (select * from t3)); id estRows task access object operator info -HashJoin 6400.00 root semi join, equal:[nulleq(executor__executor.t1.a, executor__executor.t2.a)] -├─HashJoin(Build) 6400.00 root anti semi join, equal:[nulleq(executor__executor.t2.a, executor__executor.t3.a)] +HashJoin 6400.00 root semi join, left side:HashAgg, equal:[nulleq(executor__executor.t1.a, executor__executor.t2.a)] +├─HashJoin(Build) 6400.00 root anti semi join, left side:HashAgg, equal:[nulleq(executor__executor.t2.a, executor__executor.t3.a)] │ ├─TableReader(Build) 10000.00 root data:TableFullScan │ │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo │ └─HashAgg(Probe) 8000.00 root group by:executor__executor.t2.a, funcs:firstrow(executor__executor.t2.a)->executor__executor.t2.a @@ -3004,7 +3004,7 @@ id estRows task access object operator info Union 16400.00 root ├─TableReader 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo -└─HashJoin 6400.00 root anti semi join, equal:[nulleq(executor__executor.t2.a, executor__executor.t3.a)] +└─HashJoin 6400.00 root anti semi join, left side:HashAgg, equal:[nulleq(executor__executor.t2.a, executor__executor.t3.a)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo └─HashAgg(Probe) 8000.00 root group by:executor__executor.t2.a, funcs:firstrow(executor__executor.t2.a)->executor__executor.t2.a @@ -3039,14 +3039,14 @@ NULL 3 explain format='brief' (select * from t1 intersect select * from t1) except (select * from t2 union select * from t3); id estRows task access object operator info -HashJoin 5120.00 root anti semi join, equal:[nulleq(executor__executor.t1.a, Column#9)] +HashJoin 5120.00 root anti semi join, left side:HashJoin, equal:[nulleq(executor__executor.t1.a, Column#9)] ├─HashAgg(Build) 16000.00 root group by:Column#9, funcs:firstrow(Column#9)->Column#9 │ └─Union 20000.00 root │ ├─TableReader 10000.00 root data:TableFullScan │ │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo │ └─TableReader 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo -└─HashJoin(Probe) 6400.00 root semi join, equal:[nulleq(executor__executor.t1.a, executor__executor.t1.a)] +└─HashJoin(Probe) 6400.00 root semi join, left side:HashAgg, equal:[nulleq(executor__executor.t1.a, executor__executor.t1.a)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─HashAgg(Probe) 8000.00 root group by:executor__executor.t1.a, funcs:firstrow(executor__executor.t1.a)->executor__executor.t1.a diff --git a/tests/integrationtest/r/executor/expand.result b/tests/integrationtest/r/executor/expand.result index 0edab21549..44353a9215 100644 --- a/tests/integrationtest/r/executor/expand.result +++ b/tests/integrationtest/r/executor/expand.result @@ -538,7 +538,7 @@ FROM GROUP BY T0.DATE WITH ROLLUP; id estRows task access object operator info Projection_18 1.00 root Column#6 -└─Apply_20 1.00 root CARTESIAN left outer join +└─Apply_20 1.00 root CARTESIAN left outer join, left side:HashAgg_21 ├─HashAgg_21(Build) 1.00 root group by:Column#3, gid, funcs:firstrow(Column#1)->Column#1 │ └─Expand_24 1.00 root level-projection:[Column#1, ->Column#3, 0->gid],[Column#1, Column#3, 1->gid]; schema: [Column#1,Column#3,gid] │ └─Projection_26 1.00 root 2024-09-15->Column#1, 2024-09-15->Column#3 @@ -570,7 +570,7 @@ FROM (select tr.a as DATE from tr) T0 GROUP BY T0.DATE WITH ROLLUP; id estRows task access object operator info Projection_18 8000.00 root Column#7 -└─Apply_20 8000.00 root CARTESIAN left outer join +└─Apply_20 8000.00 root CARTESIAN left outer join, left side:HashAgg_21 ├─HashAgg_21(Build) 8000.00 root group by:Column#4, gid, funcs:firstrow(executor__expand.tr.a)->executor__expand.tr.a │ └─Expand_25 10000.00 root level-projection:[executor__expand.tr.a, ->Column#4, 0->gid],[executor__expand.tr.a, Column#4, 1->gid]; schema: [executor__expand.tr.a,Column#4,gid] │ └─Projection_27 10000.00 root executor__expand.tr.a, executor__expand.tr.a->Column#4 diff --git a/tests/integrationtest/r/executor/explain.result b/tests/integrationtest/r/executor/explain.result index 110a9625c7..c00de435f2 100644 --- a/tests/integrationtest/r/executor/explain.result +++ b/tests/integrationtest/r/executor/explain.result @@ -9,7 +9,7 @@ HashJoin 100000000.00 root CARTESIAN inner join └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select * from t t1 where exists (select 1 from t t2 where t2.v > t1.v); id estRows task access object operator info -HashJoin 7992.00 root CARTESIAN semi join, other cond:gt(executor__explain.t.v, executor__explain.t.v) +HashJoin 7992.00 root CARTESIAN semi join, left side:TableReader, other cond:gt(executor__explain.t.v, executor__explain.t.v) ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(executor__explain.t.v)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -18,7 +18,7 @@ HashJoin 7992.00 root CARTESIAN semi join, other cond:gt(executor__explain.t.v, └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select * from t t1 where exists (select 1 from t t2 where t2.v in (t1.v+1, t1.v+2)); id estRows task access object operator info -HashJoin 8000.00 root CARTESIAN semi join, other cond:in(executor__explain.t.v, plus(executor__explain.t.v, 1), plus(executor__explain.t.v, 2)) +HashJoin 8000.00 root CARTESIAN semi join, left side:TableReader, other cond:in(executor__explain.t.v, plus(executor__explain.t.v, 1), plus(executor__explain.t.v, 2)) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -219,7 +219,7 @@ select @@last_plan_from_cache; 0 explain format = 'binary' select * from t; binary plan -4QFYCtwBCg1UYWJsZVJlYWRlcl81EncKD1QBEVBGdWxsU2Nhbl80IQEAAAA4DU9BKQABAfBGiMNAOAJAAkoYChYKEWV4ZWN1dG9yX19leHBsYWluEgF0Uh5rZWVwIG9yZGVyOmZhbHNlLCBzdGF0czpwc2V1ZG9w//////8BAwQBeAEGBQEgASFVVVVVlSMTHWYoAUABUhRkYXRhOlQ2kgBIWhB0aW1lOjBzLCBsb29wczowcAVFAQE0AXj///////////8BGAE= +9AFYCu8BCg1UYWJsZVJlYWRlcl81EncKD1QBEVBGdWxsU2Nhbl80IQEAAAA4DU9BKQABAfBGiMNAOAJAAkoYChYKEWV4ZWN1dG9yX19leHBsYWluEgF0Uh5rZWVwIG9yZGVyOmZhbHNlLCBzdGF0czpwc2V1ZG9w//////8BAwQBeAEGBQEgASFVVVVVlSMTHWYoAUABUhRkYXRhOlQ2kgA4WiN0aW1lOjBzLCBvcGVuBQkMY2xvcwkTHGxvb3BzOjBwBVgBATQBeP///////////wEYAQ== select @@last_plan_from_cache; @@last_plan_from_cache 0 @@ -346,7 +346,7 @@ id estRows task access object operator info Update_17 N/A root N/A └─Projection_28 8.00 root executor__explain.t1.id1, executor__explain.t1.id2, executor__explain.t1.id3, executor__explain.t1.id4, executor__explain.t1.id5, executor__explain.t1.id6, executor__explain.t1.id7, executor__explain.t1._tidb_rowid └─Selection_29 8.00 root eq(minus(executor__explain.t1.id6, ifnull(executor__explain.t1.id7, 0)), ifnull(Column#22, 0)) - └─HashJoin_32 10.00 root left outer join, equal:[eq(executor__explain.t1.id2, executor__explain.t2.id2)] + └─HashJoin_32 10.00 root left outer join, left side:IndexLookUp_84, equal:[eq(executor__explain.t1.id2, executor__explain.t2.id2)] ├─HashAgg_85(Build) 12.50 root group by:executor__explain.t2.id2, funcs:count(1)->Column#22, funcs:firstrow(executor__explain.t2.id2)->executor__explain.t2.id2 │ └─IndexJoin_92 15.62 root inner join, inner:IndexReader_91, outer key:executor__explain.t2.id10, inner key:executor__explain.t3.id20, equal cond:eq(executor__explain.t2.id10, executor__explain.t3.id20) │ ├─IndexHashJoin_132(Build) 12.50 root inner join, inner:IndexLookUp_129, outer key:executor__explain.t1.id2, inner key:executor__explain.t2.id2, equal cond:eq(executor__explain.t1.id2, executor__explain.t2.id2) diff --git a/tests/integrationtest/r/executor/index_lookup_join.result b/tests/integrationtest/r/executor/index_lookup_join.result index 95c7edbf09..fd0b2cfde7 100644 --- a/tests/integrationtest/r/executor/index_lookup_join.result +++ b/tests/integrationtest/r/executor/index_lookup_join.result @@ -135,7 +135,7 @@ create table t2 (a int, key(a)); explain select /*+ tidb_inlj(bb) */ aa.* from (select * from t1) as aa left join (select t2.a, t2.a*2 as a2 from t2) as bb on aa.a=bb.a; id estRows task access object operator info -IndexJoin_13 12487.50 root left outer join, inner:IndexReader_12, outer key:executor__index_lookup_join.t1.a, inner key:executor__index_lookup_join.t2.a, equal cond:eq(executor__index_lookup_join.t1.a, executor__index_lookup_join.t2.a) +IndexJoin_13 12487.50 root left outer join, inner:IndexReader_12, left side:IndexReader_24, outer key:executor__index_lookup_join.t1.a, inner key:executor__index_lookup_join.t2.a, equal cond:eq(executor__index_lookup_join.t1.a, executor__index_lookup_join.t2.a) ├─IndexReader_24(Build) 10000.00 root index:IndexFullScan_23 │ └─IndexFullScan_23 10000.00 cop[tikv] table:t1, index:a(a) keep order:false, stats:pseudo └─IndexReader_12(Probe) 12487.50 root index:Selection_11 diff --git a/tests/integrationtest/r/executor/index_lookup_merge_join.result b/tests/integrationtest/r/executor/index_lookup_merge_join.result index e54b5ebb6b..aa14a2bab1 100644 --- a/tests/integrationtest/r/executor/index_lookup_merge_join.result +++ b/tests/integrationtest/r/executor/index_lookup_merge_join.result @@ -11,7 +11,7 @@ insert into t1 values(1,1,1,1),(2,2,2,2),(3,3,3,3); insert into t2 values(1,1,1,1),(2,2,2,2); explain format = 'brief' select /*+ inl_merge_join(t1,t2) */ * from t1 left join t2 on t1.a = t2.a and t1.c = t2.c and t1.b = t2.b order by t1.a desc; id estRows task access object operator info -IndexJoin 100000000.00 root left outer join, inner:IndexLookUp, outer key:executor__index_lookup_merge_join.t1.a, executor__index_lookup_merge_join.t1.c, executor__index_lookup_merge_join.t1.b, inner key:executor__index_lookup_merge_join.t2.a, executor__index_lookup_merge_join.t2.c, executor__index_lookup_merge_join.t2.b, equal cond:eq(executor__index_lookup_merge_join.t1.a, executor__index_lookup_merge_join.t2.a), eq(executor__index_lookup_merge_join.t1.b, executor__index_lookup_merge_join.t2.b), eq(executor__index_lookup_merge_join.t1.c, executor__index_lookup_merge_join.t2.c) +IndexJoin 100000000.00 root left outer join, inner:IndexLookUp, left side:Projection, outer key:executor__index_lookup_merge_join.t1.a, executor__index_lookup_merge_join.t1.c, executor__index_lookup_merge_join.t1.b, inner key:executor__index_lookup_merge_join.t2.a, executor__index_lookup_merge_join.t2.c, executor__index_lookup_merge_join.t2.b, equal cond:eq(executor__index_lookup_merge_join.t1.a, executor__index_lookup_merge_join.t2.a), eq(executor__index_lookup_merge_join.t1.b, executor__index_lookup_merge_join.t2.b), eq(executor__index_lookup_merge_join.t1.c, executor__index_lookup_merge_join.t2.c) ├─Projection(Build) 10000.00 root executor__index_lookup_merge_join.t1.a, executor__index_lookup_merge_join.t1.b, executor__index_lookup_merge_join.t1.c, executor__index_lookup_merge_join.t1.d │ └─IndexLookUp 10000.00 root │ ├─IndexFullScan(Build) 10000.00 cop[tikv] table:t1, index:PRIMARY(a, b, c) keep order:true, desc, stats:pseudo diff --git a/tests/integrationtest/r/executor/jointest/join.result b/tests/integrationtest/r/executor/jointest/join.result index 1c3034c25e..fae6baed9f 100644 --- a/tests/integrationtest/r/executor/jointest/join.result +++ b/tests/integrationtest/r/executor/jointest/join.result @@ -220,7 +220,7 @@ insert into t1 values(1, 100), (2, 100), (3, 100), (4, 100), (5, 100); insert into t2 select a*100, b*100 from t1; explain format = 'brief' select /*+ TIDB_SMJ(t2) */ * from t1 left outer join t2 on t1.a=t2.a and t1.a!=3 order by t1.a; id estRows task access object operator info -MergeJoin 10000.00 root left outer join, left key:executor__jointest__join.t1.a, right key:executor__jointest__join.t2.a, left cond:ne(executor__jointest__join.t1.a, 3) +MergeJoin 10000.00 root left outer join, left side:TableReader, left key:executor__jointest__join.t1.a, right key:executor__jointest__join.t2.a, left cond:ne(executor__jointest__join.t1.a, 3) ├─TableReader(Build) 6666.67 root data:TableRangeScan │ └─TableRangeScan 6666.67 cop[tikv] table:t2 range:[-inf,3), (3,+inf], keep order:true, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -733,7 +733,7 @@ a b c explain format = 'brief' select * from t1 natural left join t2 order by a; id estRows task access object operator info Sort 12487.50 root executor__jointest__join.t1.a -└─HashJoin 12487.50 root left outer join, equal:[eq(executor__jointest__join.t1.a, executor__jointest__join.t2.a)] +└─HashJoin 12487.50 root left outer join, left side:TableReader, equal:[eq(executor__jointest__join.t1.a, executor__jointest__join.t2.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(executor__jointest__join.t2.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -748,7 +748,7 @@ explain format = 'brief' select * from t1 natural right join t2 order by a; id estRows task access object operator info Sort 12487.50 root executor__jointest__join.t2.a └─Projection 12487.50 root executor__jointest__join.t2.a, executor__jointest__join.t2.c, executor__jointest__join.t1.b - └─HashJoin 12487.50 root right outer join, equal:[eq(executor__jointest__join.t1.a, executor__jointest__join.t2.a)] + └─HashJoin 12487.50 root right outer join, left side:TableReader, equal:[eq(executor__jointest__join.t1.a, executor__jointest__join.t2.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(executor__jointest__join.t1.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -763,7 +763,7 @@ explain format = 'brief' SELECT * FROM t1 NATURAL LEFT JOIN t2 WHERE not(t1.a <= id estRows task access object operator info Projection 9990.00 root executor__jointest__join.t1.a, executor__jointest__join.t1.b, executor__jointest__join.t2.c └─Selection 9990.00 root not(nulleq(executor__jointest__join.t1.a, executor__jointest__join.t2.a)) - └─HashJoin 12487.50 root left outer join, equal:[eq(executor__jointest__join.t1.a, executor__jointest__join.t2.a)] + └─HashJoin 12487.50 root left outer join, left side:TableReader, equal:[eq(executor__jointest__join.t1.a, executor__jointest__join.t2.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(executor__jointest__join.t2.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo diff --git a/tests/integrationtest/r/executor/merge_join.result b/tests/integrationtest/r/executor/merge_join.result index 2bc38e95ef..4ddee172b6 100644 --- a/tests/integrationtest/r/executor/merge_join.result +++ b/tests/integrationtest/r/executor/merge_join.result @@ -7,7 +7,7 @@ insert into t1 values(2,3),(4,4); explain format = 'brief' select /*+ TIDB_SMJ(t) */ * from t left outer join t1 on t.c1 = t1.c1 where t.c1 = 1 or t1.c2 > 20; id estRows task access object operator info Selection 8000.00 root or(eq(executor__merge_join.t.c1, 1), gt(executor__merge_join.t1.c2, 20)) -└─MergeJoin 10000.00 root left outer join, left key:executor__merge_join.t.c1, right key:executor__merge_join.t1.c1 +└─MergeJoin 10000.00 root left outer join, left side:Sort, left key:executor__merge_join.t.c1, right key:executor__merge_join.t1.c1 ├─Sort(Build) 3336.66 root executor__merge_join.t1.c1 │ └─TableReader 3336.66 root data:Selection │ └─Selection 3336.66 cop[tikv] not(isnull(executor__merge_join.t1.c1)), or(eq(executor__merge_join.t1.c1, 1), gt(executor__merge_join.t1.c2, 20)) @@ -21,7 +21,7 @@ c1 c2 c1 c2 explain format = 'brief' select /*+ TIDB_SMJ(t) */ * from t1 right outer join t on t.c1 = t1.c1 where t.c1 = 1 or t1.c2 > 20; id estRows task access object operator info Selection 8000.00 root or(eq(executor__merge_join.t.c1, 1), gt(executor__merge_join.t1.c2, 20)) -└─MergeJoin 10000.00 root right outer join, left key:executor__merge_join.t1.c1, right key:executor__merge_join.t.c1 +└─MergeJoin 10000.00 root right outer join, left side:Sort, left key:executor__merge_join.t1.c1, right key:executor__merge_join.t.c1 ├─Sort(Build) 3336.66 root executor__merge_join.t1.c1 │ └─TableReader 3336.66 root data:Selection │ └─Selection 3336.66 cop[tikv] not(isnull(executor__merge_join.t1.c1)), or(eq(executor__merge_join.t1.c1, 1), gt(executor__merge_join.t1.c2, 20)) @@ -35,7 +35,7 @@ NULL NULL 1 1 explain format = 'brief' select /*+ TIDB_SMJ(t) */ * from t right outer join t1 on t.c1 = t1.c1 where t.c1 = 1 or t1.c2 > 20; id estRows task access object operator info Selection 9990.00 root or(eq(executor__merge_join.t.c1, 1), gt(executor__merge_join.t1.c2, 20)) -└─MergeJoin 12487.50 root right outer join, left key:executor__merge_join.t.c1, right key:executor__merge_join.t1.c1 +└─MergeJoin 12487.50 root right outer join, left side:Sort, left key:executor__merge_join.t.c1, right key:executor__merge_join.t1.c1 ├─Sort(Build) 9990.00 root executor__merge_join.t.c1 │ └─TableReader 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(executor__merge_join.t.c1)) @@ -61,7 +61,7 @@ c1 c2 c1 c2 explain format = 'brief' select /*+ TIDB_SMJ(t) */ * from t left outer join t1 on t.c1 = t1.c1 and t.c1 != 1 order by t1.c1; id estRows task access object operator info Sort 10000.00 root executor__merge_join.t1.c1 -└─MergeJoin 10000.00 root left outer join, left key:executor__merge_join.t.c1, right key:executor__merge_join.t1.c1, left cond:ne(executor__merge_join.t.c1, 1) +└─MergeJoin 10000.00 root left outer join, left side:Sort, left key:executor__merge_join.t.c1, right key:executor__merge_join.t1.c1, left cond:ne(executor__merge_join.t.c1, 1) ├─Sort(Build) 6656.67 root executor__merge_join.t1.c1 │ └─TableReader 6656.67 root data:Selection │ └─Selection 6656.67 cop[tikv] ne(executor__merge_join.t1.c1, 1), not(isnull(executor__merge_join.t1.c1)) @@ -196,7 +196,7 @@ create table s(a int, b int); insert into s values(1,1); explain format = 'brief' select /*+ TIDB_SMJ(t, s) */ a in (select a from s where s.b >= t.b) from t; id estRows task access object operator info -MergeJoin 10000.00 root left outer semi join, other cond:eq(executor__merge_join.t.a, executor__merge_join.s.a), ge(executor__merge_join.s.b, executor__merge_join.t.b) +MergeJoin 10000.00 root left outer semi join, left side:TableReader, other cond:eq(executor__merge_join.t.a, executor__merge_join.s.a), ge(executor__merge_join.s.b, executor__merge_join.t.b) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:s keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -272,7 +272,7 @@ explain format = 'brief' select /*+ TIDB_SMJ(t) */ * from t left outer join t1 o id estRows task access object operator info Selection 8000.00 root or(eq(executor__merge_join.t.c1, 1), gt(executor__merge_join.t1.c2, 20)) └─Shuffle 10000.00 root execution info: concurrency:4, data sources:[TableReader TableReader] - └─MergeJoin 10000.00 root left outer join, left key:executor__merge_join.t.c1, right key:executor__merge_join.t1.c1 + └─MergeJoin 10000.00 root left outer join, left side:Sort, left key:executor__merge_join.t.c1, right key:executor__merge_join.t1.c1 ├─Sort(Build) 3336.66 root executor__merge_join.t1.c1 │ └─ShuffleReceiver 3336.66 root │ └─TableReader 3336.66 root data:Selection @@ -289,7 +289,7 @@ explain format = 'brief' select /*+ TIDB_SMJ(t) */ * from t1 right outer join t id estRows task access object operator info Selection 8000.00 root or(eq(executor__merge_join.t.c1, 1), gt(executor__merge_join.t1.c2, 20)) └─Shuffle 10000.00 root execution info: concurrency:4, data sources:[TableReader TableReader] - └─MergeJoin 10000.00 root right outer join, left key:executor__merge_join.t1.c1, right key:executor__merge_join.t.c1 + └─MergeJoin 10000.00 root right outer join, left side:Sort, left key:executor__merge_join.t1.c1, right key:executor__merge_join.t.c1 ├─Sort(Build) 3336.66 root executor__merge_join.t1.c1 │ └─ShuffleReceiver 3336.66 root │ └─TableReader 3336.66 root data:Selection @@ -306,7 +306,7 @@ explain format = 'brief' select /*+ TIDB_SMJ(t) */ * from t right outer join t1 id estRows task access object operator info Selection 9990.00 root or(eq(executor__merge_join.t.c1, 1), gt(executor__merge_join.t1.c2, 20)) └─Shuffle 12487.50 root execution info: concurrency:4, data sources:[TableReader TableReader] - └─MergeJoin 12487.50 root right outer join, left key:executor__merge_join.t.c1, right key:executor__merge_join.t1.c1 + └─MergeJoin 12487.50 root right outer join, left side:Sort, left key:executor__merge_join.t.c1, right key:executor__merge_join.t1.c1 ├─Sort(Build) 9990.00 root executor__merge_join.t.c1 │ └─ShuffleReceiver 9990.00 root │ └─TableReader 9990.00 root data:Selection @@ -338,7 +338,7 @@ explain format = 'brief' select /*+ TIDB_SMJ(t) */ * from t left outer join t1 o id estRows task access object operator info Sort 10000.00 root executor__merge_join.t1.c1 └─Shuffle 10000.00 root execution info: concurrency:4, data sources:[TableReader TableReader] - └─MergeJoin 10000.00 root left outer join, left key:executor__merge_join.t.c1, right key:executor__merge_join.t1.c1, left cond:ne(executor__merge_join.t.c1, 1) + └─MergeJoin 10000.00 root left outer join, left side:Sort, left key:executor__merge_join.t.c1, right key:executor__merge_join.t1.c1, left cond:ne(executor__merge_join.t.c1, 1) ├─Sort(Build) 6656.67 root executor__merge_join.t1.c1 │ └─ShuffleReceiver 6656.67 root │ └─TableReader 6656.67 root data:Selection @@ -475,7 +475,7 @@ create table s(a int, b int); insert into s values(1,1); explain format = 'brief' select /*+ TIDB_SMJ(t, s) */ a in (select a from s where s.b >= t.b) from t; id estRows task access object operator info -MergeJoin 10000.00 root left outer semi join, other cond:eq(executor__merge_join.t.a, executor__merge_join.s.a), ge(executor__merge_join.s.b, executor__merge_join.t.b) +MergeJoin 10000.00 root left outer semi join, left side:TableReader, other cond:eq(executor__merge_join.t.a, executor__merge_join.s.a), ge(executor__merge_join.s.b, executor__merge_join.t.b) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:s keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -571,7 +571,7 @@ Sort 15625.00 root executor__merge_join.t1.c1 └─MergeJoin 15625.00 root inner join, left key:executor__merge_join.t2.c1, right key:executor__merge_join.t3.c1 ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:true, stats:pseudo - └─MergeJoin(Probe) 12500.00 root right outer join, left key:executor__merge_join.t1.c1, right key:executor__merge_join.t2.c1 + └─MergeJoin(Probe) 12500.00 root right outer join, left side:TableReader, left key:executor__merge_join.t1.c1, right key:executor__merge_join.t2.c1 ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:true, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -625,7 +625,7 @@ Sort 15625.00 root executor__merge_join.t1.c1 └─MergeJoin 15625.00 root inner join, left key:executor__merge_join.t2.c1, right key:executor__merge_join.t3.c1 ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:true, stats:pseudo - └─MergeJoin(Probe) 12500.00 root right outer join, left key:executor__merge_join.t1.c1, right key:executor__merge_join.t2.c1 + └─MergeJoin(Probe) 12500.00 root right outer join, left side:TableReader, left key:executor__merge_join.t1.c1, right key:executor__merge_join.t2.c1 ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:true, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan diff --git a/tests/integrationtest/r/explain_complex.result b/tests/integrationtest/r/explain_complex.result index 297cbfec24..26e580c99c 100644 --- a/tests/integrationtest/r/explain_complex.result +++ b/tests/integrationtest/r/explain_complex.result @@ -250,11 +250,11 @@ id estRows task access object operator info Sort 1.00 root explain_complex.org_department.left_value └─HashAgg 1.00 root group by:explain_complex.org_department.id, funcs:firstrow(explain_complex.org_department.id)->explain_complex.org_department.id, funcs:firstrow(explain_complex.org_department.ctx)->explain_complex.org_department.ctx, funcs:firstrow(explain_complex.org_department.name)->explain_complex.org_department.name, funcs:firstrow(explain_complex.org_department.left_value)->explain_complex.org_department.left_value, funcs:firstrow(explain_complex.org_department.right_value)->explain_complex.org_department.right_value, funcs:firstrow(explain_complex.org_department.depth)->explain_complex.org_department.depth, funcs:firstrow(explain_complex.org_department.leader_id)->explain_complex.org_department.leader_id, funcs:firstrow(explain_complex.org_department.status)->explain_complex.org_department.status, funcs:firstrow(explain_complex.org_department.created_on)->explain_complex.org_department.created_on, funcs:firstrow(explain_complex.org_department.updated_on)->explain_complex.org_department.updated_on └─Selection 0.01 root or(eq(explain_complex.org_employee_position.user_id, 62), or(eq(explain_complex.org_department.id, 20), eq(explain_complex.org_department.id, 20))) - └─HashJoin 0.02 root left outer join, equal:[eq(explain_complex.org_position.id, explain_complex.org_employee_position.position_id)] + └─HashJoin 0.02 root left outer join, left side:IndexJoin, equal:[eq(explain_complex.org_position.id, explain_complex.org_employee_position.position_id)] ├─TableReader(Build) 9.99 root data:Selection │ └─Selection 9.99 cop[tikv] eq(explain_complex.org_employee_position.status, 1000), not(isnull(explain_complex.org_employee_position.position_id)) │ └─TableFullScan 10000.00 cop[tikv] table:ep keep order:false, stats:pseudo - └─IndexJoin(Probe) 0.01 root left outer join, inner:IndexLookUp, outer key:explain_complex.org_department.id, inner key:explain_complex.org_position.department_id, equal cond:eq(explain_complex.org_department.id, explain_complex.org_position.department_id) + └─IndexJoin(Probe) 0.01 root left outer join, inner:IndexLookUp, left side:IndexLookUp, outer key:explain_complex.org_department.id, inner key:explain_complex.org_position.department_id, equal cond:eq(explain_complex.org_department.id, explain_complex.org_position.department_id) ├─IndexLookUp(Build) 0.01 root │ ├─IndexRangeScan(Build) 10.00 cop[tikv] table:d, index:org_department_ctx_index(ctx) range:[1,1], keep order:false, stats:pseudo │ └─Selection(Probe) 0.01 cop[tikv] eq(explain_complex.org_department.status, 1000) @@ -277,8 +277,8 @@ insert into Tab_C values(4,'C01',5); explain select Tab_A.name AAA,Tab_B.name BBB,Tab_A.amt Aamt, Tab_C.amt Bamt,IFNULL(Tab_C.amt, 0) FROM Tab_A left join Tab_B on Tab_A.bid=Tab_B.id left join Tab_C on Tab_A.cid=Tab_C.id and Tab_A.type='01' where Tab_A.num=112; id estRows task access object operator info Projection_11 15.62 root explain_complex.tab_a.name, explain_complex.tab_b.name, explain_complex.tab_a.amt, explain_complex.tab_c.amt, ifnull(explain_complex.tab_c.amt, 0.00)->Column#13 -└─IndexJoin_16 15.62 root left outer join, inner:TableReader_13, outer key:explain_complex.tab_a.cid, inner key:explain_complex.tab_c.id, equal cond:eq(explain_complex.tab_a.cid, explain_complex.tab_c.id), left cond:eq(explain_complex.tab_a.type, "01") - ├─IndexJoin_27(Build) 12.50 root left outer join, inner:TableReader_24, outer key:explain_complex.tab_a.bid, inner key:explain_complex.tab_b.id, equal cond:eq(explain_complex.tab_a.bid, explain_complex.tab_b.id) +└─IndexJoin_16 15.62 root left outer join, inner:TableReader_13, left side:IndexJoin_27, outer key:explain_complex.tab_a.cid, inner key:explain_complex.tab_c.id, equal cond:eq(explain_complex.tab_a.cid, explain_complex.tab_c.id), left cond:eq(explain_complex.tab_a.type, "01") + ├─IndexJoin_27(Build) 12.50 root left outer join, inner:TableReader_24, left side:TableReader_36, outer key:explain_complex.tab_a.bid, inner key:explain_complex.tab_b.id, equal cond:eq(explain_complex.tab_a.bid, explain_complex.tab_b.id) │ ├─TableReader_36(Build) 10.00 root data:Selection_35 │ │ └─Selection_35 10.00 cop[tikv] eq(explain_complex.tab_a.num, 112) │ │ └─TableFullScan_34 10000.00 cop[tikv] table:Tab_A keep order:false, stats:pseudo diff --git a/tests/integrationtest/r/explain_cte.result b/tests/integrationtest/r/explain_cte.result index 2590f9e78b..71fb6115e7 100644 --- a/tests/integrationtest/r/explain_cte.result +++ b/tests/integrationtest/r/explain_cte.result @@ -107,7 +107,7 @@ CTE_0 2.00 root Recursive CTE └─CTETable_15 1.00 root Scan on CTE_0 explain select * from t1 dt where exists(with recursive qn as (select c1*0+1 as b union all select b+1 from qn where b=0) select * from qn where b=1); id estRows task access object operator info -Apply_24 10000.00 root CARTESIAN semi join +Apply_24 10000.00 root CARTESIAN semi join, left side:TableReader_26 ├─TableReader_26(Build) 10000.00 root data:TableFullScan_25 │ └─TableFullScan_25 10000.00 cop[tikv] table:dt keep order:false, stats:pseudo └─Selection_29(Probe) 14400.00 root eq(Column#8, 1) diff --git a/tests/integrationtest/r/explain_easy.result b/tests/integrationtest/r/explain_easy.result index 7d40b50454..252ec9c3d9 100644 --- a/tests/integrationtest/r/explain_easy.result +++ b/tests/integrationtest/r/explain_easy.result @@ -14,7 +14,7 @@ set @@session.tidb_hashagg_final_concurrency = 1; set @@session.tidb_window_concurrency = 1; explain format = 'brief' select * from t3 where exists (select s.a from t3 s having sum(s.a) = t3.a ); id estRows task access object operator info -HashJoin 8000.00 root semi join, equal:[eq(Column#13, Column#11)] +HashJoin 8000.00 root semi join, left side:Projection, equal:[eq(Column#13, Column#11)] ├─StreamAgg(Build) 1.00 root funcs:sum(Column#16)->Column#11 │ └─TableReader 1.00 root data:StreamAgg │ └─StreamAgg 1.00 cop[tikv] funcs:sum(explain_easy.t3.a)->Column#16 @@ -46,7 +46,7 @@ IndexReader 10.00 root index:IndexRangeScan └─IndexRangeScan 10.00 cop[tikv] table:t1, index:c2(c2) range:[1,1], keep order:false, stats:pseudo explain format = 'brief' select * from t1 left join t2 on t1.c2 = t2.c1 where t1.c1 > 1; id estRows task access object operator info -HashJoin 4166.67 root left outer join, equal:[eq(explain_easy.t1.c2, explain_easy.t2.c1)] +HashJoin 4166.67 root left outer join, left side:TableReader, equal:[eq(explain_easy.t1.c2, explain_easy.t2.c1)] ├─TableReader(Build) 3333.33 root data:TableRangeScan │ └─TableRangeScan 3333.33 cop[tikv] table:t1 range:(1,+inf], keep order:false, stats:pseudo └─TableReader(Probe) 9990.00 root data:Selection @@ -92,7 +92,7 @@ explain format = 'brief' select sum(t1.c1 in (select c1 from t2)) from t1; id estRows task access object operator info StreamAgg 1.00 root funcs:sum(Column#13)->Column#11 └─Projection 10000.00 root cast(Column#10, decimal(3,0) BINARY)->Column#13 - └─HashJoin 10000.00 root CARTESIAN left outer semi join, other cond:eq(explain_easy.t1.c1, explain_easy.t2.c1) + └─HashJoin 10000.00 root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(explain_easy.t1.c1, explain_easy.t2.c1) ├─IndexReader(Build) 10000.00 root index:IndexFullScan │ └─IndexFullScan 10000.00 cop[tikv] table:t2, index:c1(c1) keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -109,7 +109,7 @@ HashJoin 9990.00 root inner join, equal:[eq(explain_easy.t1.c1, explain_easy.t2 explain format = 'brief' select (select count(1) k from t1 s where s.c1 = t1.c1 having k != 0) from t1; id estRows task access object operator info Projection 12500.00 root ifnull(Column#10, 0)->Column#10 -└─MergeJoin 12500.00 root left outer join, left key:explain_easy.t1.c1, right key:explain_easy.t1.c1 +└─MergeJoin 12500.00 root left outer join, left side:TableReader, left key:explain_easy.t1.c1, right key:explain_easy.t1.c1 ├─Projection(Build) 10000.00 root 1->Column#10, explain_easy.t1.c1 │ └─TableReader 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:s keep order:true, stats:pseudo @@ -127,7 +127,7 @@ MemTableScan 10000.00 root table:COLUMNS column_name:["c1"], table_name:["t1"], explain format = 'brief' select c2 = (select c2 from t2 where t1.c1 = t2.c1 order by c1 limit 1) from t1; id estRows task access object operator info Projection 10000.00 root eq(explain_easy.t1.c2, explain_easy.t2.c2)->Column#11 -└─Apply 10000.00 root CARTESIAN left outer join +└─Apply 10000.00 root CARTESIAN left outer join, left side:TableReader ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─Projection(Probe) 10000.00 root explain_easy.t2.c1, explain_easy.t2.c2 @@ -236,14 +236,14 @@ explain format = 'brief' select sum(t1.c1 in (select c1 from t2)) from t1; id estRows task access object operator info StreamAgg 1.00 root funcs:sum(Column#13)->Column#11 └─Projection 10000.00 root cast(Column#10, decimal(3,0) BINARY)->Column#13 - └─HashJoin 10000.00 root CARTESIAN left outer semi join, other cond:eq(explain_easy.t1.c1, explain_easy.t2.c1) + └─HashJoin 10000.00 root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(explain_easy.t1.c1, explain_easy.t2.c1) ├─IndexReader(Build) 10000.00 root index:IndexFullScan │ └─IndexFullScan 10000.00 cop[tikv] table:t2, index:c1(c1) keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select 1 in (select c2 from t2) from t1; id estRows task access object operator info -HashJoin 10000.00 root CARTESIAN left outer semi join, other cond:eq(1, explain_easy.t2.c2) +HashJoin 10000.00 root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(1, explain_easy.t2.c2) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -252,7 +252,7 @@ explain format = 'brief' select sum(6 in (select c2 from t2)) from t1; id estRows task access object operator info StreamAgg 1.00 root funcs:sum(Column#13)->Column#11 └─Projection 10000.00 root cast(Column#10, decimal(3,0) BINARY)->Column#13 - └─HashJoin 10000.00 root CARTESIAN left outer semi join, other cond:eq(6, explain_easy.t2.c2) + └─HashJoin 10000.00 root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(6, explain_easy.t2.c2) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -319,7 +319,7 @@ create table t(a int primary key, b int, c int, index idx(b)); explain format = 'brief' select t.c in (select count(*) from t s ignore index(idx), t t1 where s.a = t.a and s.a = t1.a) from t; id estRows task access object operator info Projection 10000.00 root Column#17 -└─Apply 10000.00 root CARTESIAN left outer semi join, other cond:eq(explain_easy.t.c, Column#16) +└─Apply 10000.00 root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(explain_easy.t.c, Column#16) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo └─StreamAgg(Probe) 10000.00 root funcs:count(1)->Column#16 @@ -331,7 +331,7 @@ Projection 10000.00 root Column#17 explain format = 'brief' select t.c in (select count(*) from t s use index(idx), t t1 where s.b = t.a and s.a = t1.a) from t; id estRows task access object operator info Projection 10000.00 root Column#17 -└─Apply 10000.00 root CARTESIAN left outer semi join, other cond:eq(explain_easy.t.c, Column#16) +└─Apply 10000.00 root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(explain_easy.t.c, Column#16) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo └─StreamAgg(Probe) 10000.00 root funcs:count(1)->Column#16 @@ -343,7 +343,7 @@ Projection 10000.00 root Column#17 explain format = 'brief' select t.c in (select count(*) from t s use index(idx), t t1 where s.b = t.a and s.c = t1.a) from t; id estRows task access object operator info Projection 10000.00 root Column#17 -└─Apply 10000.00 root CARTESIAN left outer semi join, other cond:eq(explain_easy.t.c, Column#16) +└─Apply 10000.00 root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(explain_easy.t.c, Column#16) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo └─StreamAgg(Probe) 10000.00 root funcs:count(1)->Column#16 @@ -359,7 +359,7 @@ analyze table t; explain format = 'brief' select t.c in (select count(*) from t s, t t1 where s.b = t.a and s.b = 3 and s.a = t1.a) from t; id estRows task access object operator info Projection 5.00 root Column#17 -└─Apply 5.00 root CARTESIAN left outer semi join, other cond:eq(explain_easy.t.c, Column#16) +└─Apply 5.00 root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(explain_easy.t.c, Column#16) ├─TableReader(Build) 5.00 root data:TableFullScan │ └─TableFullScan 5.00 cop[tikv] table:t keep order:false └─StreamAgg(Probe) 5.00 root funcs:count(1)->Column#16 @@ -373,7 +373,7 @@ Projection 5.00 root Column#17 explain format = 'brief' select t.c in (select count(*) from t s left join t t1 on s.a = t1.a where 3 = t.a and s.b = 3) from t; id estRows task access object operator info Projection 5.00 root Column#17 -└─Apply 5.00 root CARTESIAN left outer semi join, other cond:eq(explain_easy.t.c, Column#16) +└─Apply 5.00 root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(explain_easy.t.c, Column#16) ├─TableReader(Build) 5.00 root data:TableFullScan │ └─TableFullScan 5.00 cop[tikv] table:t keep order:false └─StreamAgg(Probe) 5.00 root funcs:count(Column#19)->Column#16 @@ -384,7 +384,7 @@ Projection 5.00 root Column#17 explain format = 'brief' select t.c in (select count(*) from t s right join t t1 on s.a = t1.a where 3 = t.a and t1.b = 3) from t; id estRows task access object operator info Projection 5.00 root Column#17 -└─Apply 5.00 root CARTESIAN left outer semi join, other cond:eq(explain_easy.t.c, Column#16) +└─Apply 5.00 root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(explain_easy.t.c, Column#16) ├─TableReader(Build) 5.00 root data:TableFullScan │ └─TableFullScan 5.00 cop[tikv] table:t keep order:false └─StreamAgg(Probe) 5.00 root funcs:count(Column#19)->Column#16 @@ -447,7 +447,7 @@ Projection 0.00 root explain_easy.t.a, explain_easy.t.b, explain_easy.t.a, expl └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select * from t t1 where not exists (select * from t t2 where t1.b = t2.b); id estRows task access object operator info -HashJoin 8000.00 root anti semi join, equal:[eq(explain_easy.t.b, explain_easy.t.b)] +HashJoin 8000.00 root anti semi join, left side:TableReader, equal:[eq(explain_easy.t.b, explain_easy.t.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -506,7 +506,7 @@ id estRows task access object operator info StreamAgg 1.00 root funcs:count(1)->Column#22 └─HashAgg 2.50 root group by:Column#47, Column#48, Column#49, funcs:count(1)->Column#36 └─Projection 2.50 root Column#14->Column#47, Column#15->Column#48, coalesce(explain_easy.test02.region_name, 不详)->Column#49 - └─IndexJoin 2.50 root left outer join, inner:TableReader, outer key:Column#16, inner key:explain_easy.test02.id, equal cond:eq(Column#16, explain_easy.test02.id) + └─IndexJoin 2.50 root left outer join, inner:TableReader, left side:HashAgg, outer key:Column#16, inner key:explain_easy.test02.id, equal cond:eq(Column#16, explain_easy.test02.id) ├─HashAgg(Build) 2.00 root group by:Column#14, Column#15, Column#16, funcs:firstrow(Column#33)->Column#14, funcs:firstrow(Column#34)->Column#15, funcs:firstrow(Column#35)->Column#16, funcs:count(1)->Column#37 │ └─Union 2.00 root │ ├─Projection 1.00 root Column#33, Column#34, Column#35, Column#14, Column#15, Column#16 @@ -564,7 +564,7 @@ Projection 10.00 root plus(1, cast(explain_easy.t.nb, bigint BINARY))->Column#5 └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo explain format = 'brief' select * from t ta left outer join t tb on ta.nb = tb.nb and ta.a > 1 where ifnull(ta.nb, 1) or ta.nb is null; id estRows task access object operator info -HashJoin 10000.00 root left outer join, equal:[eq(explain_easy.t.nb, explain_easy.t.nb)], left cond:[gt(explain_easy.t.a, 1)] +HashJoin 10000.00 root left outer join, left side:TableReader, equal:[eq(explain_easy.t.nb, explain_easy.t.nb)], left cond:[gt(explain_easy.t.a, 1)] ├─TableReader(Build) 8000.00 root data:Selection │ └─Selection 8000.00 cop[tikv] or(cast(explain_easy.t.nb, bigint BINARY), 0) │ └─TableFullScan 10000.00 cop[tikv] table:tb keep order:false, stats:pseudo @@ -573,7 +573,7 @@ HashJoin 10000.00 root left outer join, equal:[eq(explain_easy.t.nb, explain_ea └─TableFullScan 10000.00 cop[tikv] table:ta keep order:false, stats:pseudo explain format = 'brief' select * from t ta right outer join t tb on ta.nb = tb.nb and ta.a > 1 where ifnull(tb.nb, 1) or tb.nb is null; id estRows task access object operator info -HashJoin 8000.00 root right outer join, equal:[eq(explain_easy.t.nb, explain_easy.t.nb)] +HashJoin 8000.00 root right outer join, left side:TableReader, equal:[eq(explain_easy.t.nb, explain_easy.t.nb)] ├─TableReader(Build) 2666.67 root data:Selection │ └─Selection 2666.67 cop[tikv] cast(explain_easy.t.nb, bigint BINARY), gt(explain_easy.t.a, 1) │ └─TableFullScan 10000.00 cop[tikv] table:ta keep order:false, stats:pseudo @@ -592,7 +592,7 @@ HashJoin 3333.33 root inner join, equal:[eq(explain_easy.t.nb, explain_easy.t.n explain format = 'brief' select ifnull(t.nc, 1) in (select count(*) from t s , t t1 where s.a = t.a and s.a = t1.a) from t; id estRows task access object operator info Projection 10000.00 root Column#22 -└─Apply 10000.00 root left outer semi join, equal:[eq(Column#23, Column#21)] +└─Apply 10000.00 root left outer semi join, left side:Projection, equal:[eq(Column#23, Column#21)] ├─Projection(Build) 10000.00 root explain_easy.t.a, cast(explain_easy.t.nc, bigint BINARY)->Column#23 │ └─TableReader 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo @@ -609,14 +609,14 @@ Projection 10000.00 root Column#22 explain format = 'brief' select * from t ta left outer join t tb on ta.nb = tb.nb and ta.a > 1 where ifnull(tb.a, 1) or tb.a is null; id estRows task access object operator info Selection 10000.00 root or(ifnull(explain_easy.t.a, 1), isnull(explain_easy.t.a)) -└─HashJoin 12500.00 root left outer join, equal:[eq(explain_easy.t.nb, explain_easy.t.nb)], left cond:[gt(explain_easy.t.a, 1)] +└─HashJoin 12500.00 root left outer join, left side:TableReader, equal:[eq(explain_easy.t.nb, explain_easy.t.nb)], left cond:[gt(explain_easy.t.a, 1)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:tb keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan └─TableFullScan 10000.00 cop[tikv] table:ta keep order:false, stats:pseudo explain format = 'brief' select * from t ta right outer join t tb on ta.nb = tb.nb and ta.a > 1 where ifnull(tb.a, 1) or tb.a is null; id estRows task access object operator info -HashJoin 8002.00 root right outer join, equal:[eq(explain_easy.t.nb, explain_easy.t.nb)] +HashJoin 8002.00 root right outer join, left side:TableReader, equal:[eq(explain_easy.t.nb, explain_easy.t.nb)] ├─TableReader(Build) 3333.33 root data:Selection │ └─Selection 3333.33 cop[tikv] gt(explain_easy.t.a, 1) │ └─TableFullScan 10000.00 cop[tikv] table:ta keep order:false, stats:pseudo @@ -626,7 +626,7 @@ HashJoin 8002.00 root right outer join, equal:[eq(explain_easy.t.nb, explain_ea explain format = 'brief' select ifnull(t.a, 1) in (select count(*) from t s , t t1 where s.a = t.a and s.a = t1.a) from t; id estRows task access object operator info Projection 10000.00 root Column#22 -└─Apply 10000.00 root left outer semi join, equal:[eq(Column#23, Column#21)] +└─Apply 10000.00 root left outer semi join, left side:Projection, equal:[eq(Column#23, Column#21)] ├─Projection(Build) 10000.00 root explain_easy.t.a, ifnull(explain_easy.t.a, 1)->Column#23 │ └─TableReader 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo @@ -708,7 +708,7 @@ begin; insert into t values (1); explain format = 'brief' select * from t left outer join t t1 on t.a = t1.a where t.a not between 1 and 2; id estRows task access object operator info -HashJoin 8320.83 root left outer join, equal:[eq(explain_easy.t.a, explain_easy.t.a)] +HashJoin 8320.83 root left outer join, left side:UnionScan, equal:[eq(explain_easy.t.a, explain_easy.t.a)] ├─UnionScan(Build) 6656.67 root not(and(ge(explain_easy.t.a, 1), le(explain_easy.t.a, 2))), not(isnull(explain_easy.t.a)) │ └─TableReader 6656.67 root data:Selection │ └─Selection 6656.67 cop[tikv] not(isnull(explain_easy.t.a)), or(lt(explain_easy.t.a, 1), gt(explain_easy.t.a, 2)) @@ -801,7 +801,7 @@ create table t(a int, b int); explain format = 'brief' select (select count(n.a) from t) from t n; id estRows task access object operator info Projection 1.00 root Column#11->Column#12 -└─Apply 1.00 root CARTESIAN left outer join +└─Apply 1.00 root CARTESIAN left outer join, left side:StreamAgg ├─StreamAgg(Build) 1.00 root funcs:count(explain_easy.t.a)->Column#7 │ └─TableReader 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:n keep order:false, stats:pseudo @@ -812,12 +812,12 @@ Projection 1.00 root Column#11->Column#12 explain format = 'brief' select (select sum((select count(a)))) from t; id estRows task access object operator info Projection 1.00 root Column#7->Column#8 -└─Apply 1.00 root CARTESIAN left outer join +└─Apply 1.00 root CARTESIAN left outer join, left side:StreamAgg ├─StreamAgg(Build) 1.00 root funcs:count(explain_easy.t.a)->Column#5 │ └─TableReader 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo └─HashAgg(Probe) 1.00 root funcs:sum(Column#12)->Column#7 - └─HashJoin 1.00 root CARTESIAN left outer join + └─HashJoin 1.00 root CARTESIAN left outer join, left side:TableDual ├─HashAgg(Build) 1.00 root group by:1, funcs:sum(Column#14)->Column#12 │ └─Projection 1.00 root cast(Column#6, decimal(20,0) BINARY)->Column#14 │ └─MaxOneRow 1.00 root @@ -827,7 +827,7 @@ Projection 1.00 root Column#7->Column#8 explain format = 'brief' select count(a) from t group by b order by (select count(a)); id estRows task access object operator info Sort 8000.00 root Column#5 -└─HashJoin 8000.00 root CARTESIAN left outer join +└─HashJoin 8000.00 root CARTESIAN left outer join, left side:HashAgg ├─TableDual(Build) 1.00 root rows:1 └─HashAgg(Probe) 8000.00 root group by:explain_easy.t.b, funcs:count(Column#9)->Column#5 └─TableReader 8000.00 root data:HashAgg @@ -836,7 +836,7 @@ Sort 8000.00 root Column#5 explain format = 'brief' select (select sum(count(a))) from t; id estRows task access object operator info Projection 1.00 root Column#5->Column#6 -└─Apply 1.00 root CARTESIAN left outer join +└─Apply 1.00 root CARTESIAN left outer join, left side:StreamAgg ├─StreamAgg(Build) 1.00 root funcs:count(explain_easy.t.a)->Column#4 │ └─TableReader 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo @@ -847,9 +847,9 @@ explain format = 'brief' select sum(a), (select sum(a)), count(a) from t group b id estRows task access object operator info Projection 8000.00 root Column#5->Column#9, Column#5->Column#10, Column#6->Column#11 └─Sort 8000.00 root Column#6 - └─HashJoin 8000.00 root CARTESIAN left outer join + └─HashJoin 8000.00 root CARTESIAN left outer join, left side:HashJoin ├─TableDual(Build) 1.00 root rows:1 - └─HashJoin(Probe) 8000.00 root CARTESIAN left outer join + └─HashJoin(Probe) 8000.00 root CARTESIAN left outer join, left side:HashAgg ├─TableDual(Build) 1.00 root rows:1 └─HashAgg(Probe) 8000.00 root group by:explain_easy.t.b, funcs:sum(Column#14)->Column#5, funcs:count(Column#15)->Column#6 └─TableReader 8000.00 root data:HashAgg diff --git a/tests/integrationtest/r/explain_easy_stats.result b/tests/integrationtest/r/explain_easy_stats.result index cbe78c65ad..21ca5f66d4 100644 --- a/tests/integrationtest/r/explain_easy_stats.result +++ b/tests/integrationtest/r/explain_easy_stats.result @@ -15,7 +15,7 @@ set @@session.tidb_hashagg_partial_concurrency = 1; set @@session.tidb_hashagg_final_concurrency = 1; explain format = 'brief' select * from t3 where exists (select s.a from t3 s having sum(s.a) = t3.a ); id estRows task access object operator info -HashJoin 1600.00 root semi join, equal:[eq(Column#13, Column#11)] +HashJoin 1600.00 root semi join, left side:Projection, equal:[eq(Column#13, Column#11)] ├─StreamAgg(Build) 1.00 root funcs:sum(Column#16)->Column#11 │ └─TableReader 1.00 root data:StreamAgg │ └─StreamAgg 1.00 cop[tikv] funcs:sum(explain_easy_stats.t3.a)->Column#16 @@ -47,7 +47,7 @@ IndexReader 0.00 root index:IndexRangeScan └─IndexRangeScan 0.00 cop[tikv] table:t1, index:c2(c2) range:[1,1], keep order:false, stats:partial[c2:missing] explain format = 'brief' select * from t1 left join t2 on t1.c2 = t2.c1 where t1.c1 > 1; id estRows task access object operator info -HashJoin 2481.25 root left outer join, equal:[eq(explain_easy_stats.t1.c2, explain_easy_stats.t2.c1)] +HashJoin 2481.25 root left outer join, left side:TableReader, equal:[eq(explain_easy_stats.t1.c2, explain_easy_stats.t2.c1)] ├─TableReader(Build) 1985.00 root data:Selection │ └─Selection 1985.00 cop[tikv] not(isnull(explain_easy_stats.t2.c1)) │ └─TableFullScan 1985.00 cop[tikv] table:t2 keep order:false, stats:partial[c1:missing] @@ -103,7 +103,7 @@ MemTableScan 10000.00 root table:COLUMNS explain format = 'brief' select c2 = (select c2 from t2 where t1.c1 = t2.c1 order by c1 limit 1) from t1; id estRows task access object operator info Projection 1999.00 root eq(explain_easy_stats.t1.c2, explain_easy_stats.t2.c2)->Column#11 -└─Apply 1999.00 root CARTESIAN left outer join +└─Apply 1999.00 root CARTESIAN left outer join, left side:TableReader ├─TableReader(Build) 1999.00 root data:TableFullScan │ └─TableFullScan 1999.00 cop[tikv] table:t1 keep order:false └─TopN(Probe) 1999.00 root explain_easy_stats.t2.c1, offset:0, count:1 @@ -120,7 +120,7 @@ Limit 1.00 root offset:0, count:1 set @@session.tidb_opt_insubq_to_join_and_agg=0; explain format = 'brief' select 1 in (select c2 from t2) from t1; id estRows task access object operator info -HashJoin 1999.00 root CARTESIAN left outer semi join, other cond:eq(1, explain_easy_stats.t2.c2) +HashJoin 1999.00 root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(1, explain_easy_stats.t2.c2) ├─TableReader(Build) 1985.00 root data:TableFullScan │ └─TableFullScan 1985.00 cop[tikv] table:t2 keep order:false └─TableReader(Probe) 1999.00 root data:TableFullScan diff --git a/tests/integrationtest/r/explain_union_scan.result b/tests/integrationtest/r/explain_union_scan.result index 094535d745..872ffa189d 100644 --- a/tests/integrationtest/r/explain_union_scan.result +++ b/tests/integrationtest/r/explain_union_scan.result @@ -14,7 +14,7 @@ update city set province_id = 77 where id="06766b3ef41d484d8878606393f1ed0b"; explain format = 'brief' select t1.*, t2.province_id as provinceID, t2.city_name as cityName, t3.description as description from city t1 inner join city t2 on t1.id = t2.id left join city t3 on t1.province_id = t3.province_id where t1.province_id > 1 and t1.province_id < 100 limit 10; id estRows task access object operator info Limit 10.00 root offset:0, count:10 -└─HashJoin 10.00 root left outer join, equal:[eq(explain_union_scan.city.province_id, explain_union_scan.city.province_id)] +└─HashJoin 10.00 root left outer join, left side:Limit, equal:[eq(explain_union_scan.city.province_id, explain_union_scan.city.province_id)] ├─Limit(Build) 10.00 root offset:0, count:10 │ └─IndexJoin 10.00 root inner join, inner:UnionScan, outer key:explain_union_scan.city.id, inner key:explain_union_scan.city.id, equal cond:eq(explain_union_scan.city.id, explain_union_scan.city.id) │ ├─UnionScan(Build) 10.00 root diff --git a/tests/integrationtest/r/expression/explain.result b/tests/integrationtest/r/expression/explain.result index e2c7830579..9e1815f5de 100644 --- a/tests/integrationtest/r/expression/explain.result +++ b/tests/integrationtest/r/expression/explain.result @@ -4,7 +4,7 @@ create table t1(id bigint primary key, a int, b int); create table t2(id bigint primary key, a int, b int); explain format = 'brief' select * from t1 left join t2 on t1.a > t2.a and t1.a = 1; id estRows task access object operator info -HashJoin 33233333.33 root CARTESIAN left outer join, left cond:[eq(expression__explain.t1.a, 1)] +HashJoin 33233333.33 root CARTESIAN left outer join, left side:TableReader, left cond:[eq(expression__explain.t1.a, 1)] ├─TableReader(Build) 3323.33 root data:Selection │ └─Selection 3323.33 cop[tikv] gt(1, expression__explain.t2.a) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -12,7 +12,7 @@ HashJoin 33233333.33 root CARTESIAN left outer join, left cond:[eq(expression__ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select * from t1 left join t2 on t1.a > t2.a where t1.a = 1; id estRows task access object operator info -HashJoin 33233.33 root CARTESIAN left outer join +HashJoin 33233.33 root CARTESIAN left outer join, left side:TableReader ├─TableReader(Build) 10.00 root data:Selection │ └─Selection 10.00 cop[tikv] eq(expression__explain.t1.a, 1) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -21,7 +21,7 @@ HashJoin 33233.33 root CARTESIAN left outer join └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo explain format = 'brief' select * from t1 left join t2 on t1.a = t2.a and t1.a > 1; id estRows task access object operator info -HashJoin 10000.00 root left outer join, equal:[eq(expression__explain.t1.a, expression__explain.t2.a)], left cond:[gt(expression__explain.t1.a, 1)] +HashJoin 10000.00 root left outer join, left side:TableReader, equal:[eq(expression__explain.t1.a, expression__explain.t2.a)], left cond:[gt(expression__explain.t1.a, 1)] ├─TableReader(Build) 3333.33 root data:Selection │ └─Selection 3333.33 cop[tikv] gt(expression__explain.t2.a, 1), not(isnull(expression__explain.t2.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -29,7 +29,7 @@ HashJoin 10000.00 root left outer join, equal:[eq(expression__explain.t1.a, exp └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select * from t1 left join t2 on t1.a = t2.a where t1.a > 1; id estRows task access object operator info -HashJoin 4166.67 root left outer join, equal:[eq(expression__explain.t1.a, expression__explain.t2.a)] +HashJoin 4166.67 root left outer join, left side:TableReader, equal:[eq(expression__explain.t1.a, expression__explain.t2.a)] ├─TableReader(Build) 3333.33 root data:Selection │ └─Selection 3333.33 cop[tikv] gt(expression__explain.t2.a, 1), not(isnull(expression__explain.t2.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -38,7 +38,7 @@ HashJoin 4166.67 root left outer join, equal:[eq(expression__explain.t1.a, expr └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select * from t1 right join t2 on t1.a > t2.a where t2.a = 1; id estRows task access object operator info -HashJoin 33333.33 root CARTESIAN right outer join +HashJoin 33333.33 root CARTESIAN right outer join, left side:TableReader ├─TableReader(Build) 10.00 root data:Selection │ └─Selection 10.00 cop[tikv] eq(expression__explain.t2.a, 1) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -47,7 +47,7 @@ HashJoin 33333.33 root CARTESIAN right outer join └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select * from t1 right join t2 on t1.a = t2.a where t2.a > 1; id estRows task access object operator info -HashJoin 4166.67 root right outer join, equal:[eq(expression__explain.t1.a, expression__explain.t2.a)] +HashJoin 4166.67 root right outer join, left side:TableReader, equal:[eq(expression__explain.t1.a, expression__explain.t2.a)] ├─TableReader(Build) 3333.33 root data:Selection │ └─Selection 3333.33 cop[tikv] gt(expression__explain.t2.a, 1) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -56,7 +56,7 @@ HashJoin 4166.67 root right outer join, equal:[eq(expression__explain.t1.a, exp └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select * from t1 right join t2 on t1.a = t2.a and t2.a > 1; id estRows task access object operator info -HashJoin 10000.00 root right outer join, equal:[eq(expression__explain.t1.a, expression__explain.t2.a)], right cond:gt(expression__explain.t2.a, 1) +HashJoin 10000.00 root right outer join, left side:TableReader, equal:[eq(expression__explain.t1.a, expression__explain.t2.a)], right cond:gt(expression__explain.t2.a, 1) ├─TableReader(Build) 3333.33 root data:Selection │ └─Selection 3333.33 cop[tikv] gt(expression__explain.t1.a, 1), not(isnull(expression__explain.t1.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -64,7 +64,7 @@ HashJoin 10000.00 root right outer join, equal:[eq(expression__explain.t1.a, ex └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo explain format = 'brief' select * from t1 right join t2 on t1.a > t2.a and t2.a = 1; id estRows task access object operator info -HashJoin 33333333.33 root CARTESIAN right outer join, right cond:eq(expression__explain.t2.a, 1) +HashJoin 33333333.33 root CARTESIAN right outer join, left side:TableReader, right cond:eq(expression__explain.t2.a, 1) ├─TableReader(Build) 3333.33 root data:Selection │ └─Selection 3333.33 cop[tikv] gt(expression__explain.t1.a, 1) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -72,7 +72,7 @@ HashJoin 33333333.33 root CARTESIAN right outer join, right cond:eq(expression_ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo explain format = 'brief' select * from t1 left join t2 on t1.a = t2.a and t2.a > 1; id estRows task access object operator info -HashJoin 10000.00 root left outer join, equal:[eq(expression__explain.t1.a, expression__explain.t2.a)] +HashJoin 10000.00 root left outer join, left side:TableReader, equal:[eq(expression__explain.t1.a, expression__explain.t2.a)] ├─TableReader(Build) 3333.33 root data:Selection │ └─Selection 3333.33 cop[tikv] gt(expression__explain.t2.a, 1), not(isnull(expression__explain.t2.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -80,7 +80,7 @@ HashJoin 10000.00 root left outer join, equal:[eq(expression__explain.t1.a, exp └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select * from t1 left join t2 on t1.a > t2.a and t2.a = 1; id estRows task access object operator info -HashJoin 100000.00 root CARTESIAN left outer join, other cond:gt(expression__explain.t1.a, expression__explain.t2.a) +HashJoin 100000.00 root CARTESIAN left outer join, left side:TableReader, other cond:gt(expression__explain.t1.a, expression__explain.t2.a) ├─TableReader(Build) 10.00 root data:Selection │ └─Selection 10.00 cop[tikv] eq(expression__explain.t2.a, 1) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -88,7 +88,7 @@ HashJoin 100000.00 root CARTESIAN left outer join, other cond:gt(expression__ex └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select * from t1 right join t2 on t1.a > t2.a and t1.a = 1; id estRows task access object operator info -HashJoin 100000.00 root CARTESIAN right outer join, other cond:gt(expression__explain.t1.a, expression__explain.t2.a) +HashJoin 100000.00 root CARTESIAN right outer join, left side:TableReader, other cond:gt(expression__explain.t1.a, expression__explain.t2.a) ├─TableReader(Build) 10.00 root data:Selection │ └─Selection 10.00 cop[tikv] eq(expression__explain.t1.a, 1) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -96,7 +96,7 @@ HashJoin 100000.00 root CARTESIAN right outer join, other cond:gt(expression__e └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo explain format = 'brief' select * from t1 right join t2 on t1.a = t2.a and t1.a > 1; id estRows task access object operator info -HashJoin 10000.00 root right outer join, equal:[eq(expression__explain.t1.a, expression__explain.t2.a)] +HashJoin 10000.00 root right outer join, left side:TableReader, equal:[eq(expression__explain.t1.a, expression__explain.t2.a)] ├─TableReader(Build) 3333.33 root data:Selection │ └─Selection 3333.33 cop[tikv] gt(expression__explain.t1.a, 1), not(isnull(expression__explain.t1.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -104,14 +104,14 @@ HashJoin 10000.00 root right outer join, equal:[eq(expression__explain.t1.a, ex └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo explain format = 'brief' select * from t1 left join t2 on t1.a = t1.b and t1.a > 1; id estRows task access object operator info -HashJoin 100000000.00 root CARTESIAN left outer join, left cond:[eq(expression__explain.t1.a, expression__explain.t1.b) gt(expression__explain.t1.a, 1)] +HashJoin 100000000.00 root CARTESIAN left outer join, left side:TableReader, left cond:[eq(expression__explain.t1.a, expression__explain.t1.b) gt(expression__explain.t1.a, 1)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select * from t1 left join t2 on t2.a = t2.b and t2.a > 1; id estRows task access object operator info -HashJoin 8888888.89 root CARTESIAN left outer join +HashJoin 8888888.89 root CARTESIAN left outer join, left side:TableReader ├─TableReader(Build) 888.89 root data:Selection │ └─Selection 888.89 cop[tikv] eq(expression__explain.t2.a, expression__explain.t2.b), gt(expression__explain.t2.a, 1), gt(expression__explain.t2.b, 1) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -131,7 +131,7 @@ id estRows task access object operator info TableDual 0.00 root rows:0 explain format = 'brief' select * from t1 left join t2 on true where t1.a = 1 and t1.a = 1; id estRows task access object operator info -HashJoin 100000.00 root CARTESIAN left outer join +HashJoin 100000.00 root CARTESIAN left outer join, left side:TableReader ├─TableReader(Build) 10.00 root data:Selection │ └─Selection 10.00 cop[tikv] eq(expression__explain.t1.a, 1) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -139,45 +139,45 @@ HashJoin 100000.00 root CARTESIAN left outer join └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo explain format = 'brief' select * from t1 left join t2 on false; id estRows task access object operator info -HashJoin 10000.00 root CARTESIAN left outer join +HashJoin 10000.00 root CARTESIAN left outer join, left side:TableReader ├─TableDual(Build) 0.00 root rows:0 └─TableReader(Probe) 10000.00 root data:TableFullScan └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select * from t1 right join t2 on false; id estRows task access object operator info -HashJoin 10000.00 root CARTESIAN right outer join +HashJoin 10000.00 root CARTESIAN right outer join, left side:TableDual ├─TableDual(Build) 0.00 root rows:0 └─TableReader(Probe) 10000.00 root data:TableFullScan └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo explain format = 'brief' select * from t1 left join t2 on t1.a = 1 and t1.a = 2; id estRows task access object operator info -HashJoin 10000.00 root CARTESIAN left outer join +HashJoin 10000.00 root CARTESIAN left outer join, left side:TableReader ├─TableDual(Build) 0.00 root rows:0 └─TableReader(Probe) 10000.00 root data:TableFullScan └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select * from t1 left join t2 on t1.a =1 where t1.a = 2; id estRows task access object operator info -HashJoin 10.00 root CARTESIAN left outer join +HashJoin 10.00 root CARTESIAN left outer join, left side:TableReader ├─TableDual(Build) 0.00 root rows:0 └─TableReader(Probe) 10.00 root data:Selection └─Selection 10.00 cop[tikv] eq(expression__explain.t1.a, 2) └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select * from t1 left join t2 on t2.a = 1 and t2.a = 2; id estRows task access object operator info -HashJoin 10000.00 root CARTESIAN left outer join +HashJoin 10000.00 root CARTESIAN left outer join, left side:TableReader ├─TableDual(Build) 0.00 root rows:0 └─TableReader(Probe) 10000.00 root data:TableFullScan └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select * from t1 left join t2 on t1.a = 1 or (t1.a = 2 and t1.a = 3); id estRows task access object operator info -HashJoin 100000000.00 root CARTESIAN left outer join, left cond:[or(eq(expression__explain.t1.a, 1), 0)] +HashJoin 100000000.00 root CARTESIAN left outer join, left side:TableReader, left cond:[or(eq(expression__explain.t1.a, 1), 0)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select * from t1 left join t2 on true where t1.a = 1 or (t1.a = 2 and t1.a = 3); id estRows task access object operator info -HashJoin 100000.00 root CARTESIAN left outer join +HashJoin 100000.00 root CARTESIAN left outer join, left side:TableReader ├─TableReader(Build) 10.00 root data:Selection │ └─Selection 10.00 cop[tikv] or(eq(expression__explain.t1.a, 1), 0) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -187,7 +187,7 @@ explain format = 'brief' select * from t1 where t1.b > 1 or t1.b in (select b fr id estRows task access object operator info Projection 8000.00 root expression__explain.t1.id, expression__explain.t1.a, expression__explain.t1.b └─Selection 8000.00 root or(gt(expression__explain.t1.b, 1), Column#7) - └─HashJoin 10000.00 root CARTESIAN left outer semi join, other cond:eq(expression__explain.t1.b, expression__explain.t2.b) + └─HashJoin 10000.00 root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(expression__explain.t1.b, expression__explain.t2.b) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -195,7 +195,7 @@ Projection 8000.00 root expression__explain.t1.id, expression__explain.t1.a, ex explain format = 'brief' select * from t1 left join t2 on t1.a = t2.a where ifnull(t2.b, t1.a) = 1; id estRows task access object operator info Selection 9990.00 root eq(ifnull(expression__explain.t2.b, expression__explain.t1.a), 1) -└─HashJoin 12487.50 root left outer join, equal:[eq(expression__explain.t1.a, expression__explain.t2.a)] +└─HashJoin 12487.50 root left outer join, left side:TableReader, equal:[eq(expression__explain.t1.a, expression__explain.t2.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(expression__explain.t2.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo diff --git a/tests/integrationtest/r/index_join.result b/tests/integrationtest/r/index_join.result index 10f49a1999..35810db5cc 100644 --- a/tests/integrationtest/r/index_join.result +++ b/tests/integrationtest/r/index_join.result @@ -34,7 +34,7 @@ create table t2(a int not null, b int not null, key a(a)); set @@tidb_opt_insubq_to_join_and_agg=0; explain format = 'brief' select /*+ TIDB_INLJ(t2@sel_2) */ * from t1 where t1.a in (select t2.a from t2); id estRows task access object operator info -IndexJoin 8000.00 root semi join, inner:IndexReader, outer key:index_join.t1.a, inner key:index_join.t2.a, equal cond:eq(index_join.t1.a, index_join.t2.a) +IndexJoin 8000.00 root semi join, inner:IndexReader, left side:TableReader, outer key:index_join.t1.a, inner key:index_join.t2.a, equal cond:eq(index_join.t1.a, index_join.t2.a) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─IndexReader(Probe) 12500.00 root index:IndexRangeScan diff --git a/tests/integrationtest/r/index_merge.result b/tests/integrationtest/r/index_merge.result index 5afb9617f0..1a842a0ef0 100644 --- a/tests/integrationtest/r/index_merge.result +++ b/tests/integrationtest/r/index_merge.result @@ -12,7 +12,7 @@ id estRows task access object operator info Sort_8 4433.77 root index_merge.t1.c1 └─Projection_10 4433.77 root index_merge.t1.c1, index_merge.t1.c2, index_merge.t1.c3 └─Selection_11 4433.77 root or(lt(index_merge.t1.c1, 10), and(lt(index_merge.t1.c2, 10), Column#9)) - └─HashJoin_12 5542.21 root CARTESIAN left outer semi join, other cond:eq(index_merge.t1.c3, index_merge.t1.c3) + └─HashJoin_12 5542.21 root CARTESIAN left outer semi join, left side:IndexMerge_16, other cond:eq(index_merge.t1.c3, index_merge.t1.c3) ├─TableReader_18(Build) 10000.00 root data:TableFullScan_17 │ └─TableFullScan_17 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─IndexMerge_16(Probe) 5542.21 root type: union @@ -32,7 +32,7 @@ id estRows task access object operator info Sort_8 4433.77 root index_merge.t1.c1 └─Projection_10 4433.77 root index_merge.t1.c1, index_merge.t1.c2, index_merge.t1.c3 └─Selection_11 4433.77 root or(lt(index_merge.t1.c1, 10), and(lt(index_merge.t1.c2, 10), Column#9)) - └─HashJoin_12 5542.21 root Null-aware anti left outer semi join, equal:[eq(index_merge.t1.c3, index_merge.t1.c3)] + └─HashJoin_12 5542.21 root Null-aware anti left outer semi join, left side:IndexMerge_16, equal:[eq(index_merge.t1.c3, index_merge.t1.c3)] ├─TableReader_18(Build) 10000.00 root data:TableFullScan_17 │ └─TableFullScan_17 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─IndexMerge_16(Probe) 5542.21 root type: union @@ -68,7 +68,7 @@ id estRows task access object operator info Sort_9 4433.77 root index_merge.t1.c1 └─Projection_11 4433.77 root index_merge.t1.c1, index_merge.t1.c2, index_merge.t1.c3 └─Selection_12 4433.77 root or(lt(index_merge.t1.c1, 10), and(lt(index_merge.t1.c2, 10), Column#10)) - └─HashJoin_22 5542.21 root left outer semi join, equal:[eq(index_merge.t1.c1, index_merge.t2.c1)] + └─HashJoin_22 5542.21 root left outer semi join, left side:IndexMerge_26, equal:[eq(index_merge.t1.c1, index_merge.t2.c1)] ├─IndexReader_30(Build) 10000.00 root index:IndexFullScan_29 │ └─IndexFullScan_29 10000.00 cop[tikv] table:t2, index:c1(c1) keep order:false, stats:pseudo └─IndexMerge_26(Probe) 5542.21 root type: union @@ -88,7 +88,7 @@ id estRows task access object operator info Sort_9 4433.77 root index_merge.t1.c1 └─Projection_11 4433.77 root index_merge.t1.c1, index_merge.t1.c2, index_merge.t1.c3 └─Selection_12 4433.77 root or(lt(index_merge.t1.c1, 10), and(lt(index_merge.t1.c2, 10), Column#10)) - └─HashJoin_22 5542.21 root anti left outer semi join, equal:[eq(index_merge.t1.c1, index_merge.t2.c1)] + └─HashJoin_22 5542.21 root anti left outer semi join, left side:IndexMerge_26, equal:[eq(index_merge.t1.c1, index_merge.t2.c1)] ├─IndexReader_30(Build) 10000.00 root index:IndexFullScan_29 │ └─IndexFullScan_29 10000.00 cop[tikv] table:t2, index:c1(c1) keep order:false, stats:pseudo └─IndexMerge_26(Probe) 5542.21 root type: union @@ -211,7 +211,7 @@ id estRows task access object operator info Sort_14 4433.77 root index_merge.t1.c1 └─Projection_16 4433.77 root index_merge.t1.c1, index_merge.t1.c2, index_merge.t1.c3 └─Selection_17 4433.77 root or(lt(index_merge.t1.c1, 10), and(lt(index_merge.t1.c2, 10), Column#13)) - └─HashJoin_18 5542.21 root CARTESIAN left outer semi join, other cond:eq(index_merge.t1.c3, index_merge.t2.c1) + └─HashJoin_18 5542.21 root CARTESIAN left outer semi join, left side:IndexMerge_22, other cond:eq(index_merge.t1.c3, index_merge.t2.c1) ├─HashJoin_37(Build) 9990.00 root inner join, equal:[eq(index_merge.t2.c2, index_merge.t2.c3)] │ ├─HashAgg_41(Build) 7992.00 root group by:index_merge.t2.c3, funcs:firstrow(index_merge.t2.c3)->index_merge.t2.c3 │ │ └─TableReader_48 9990.00 root data:Selection_47 diff --git a/tests/integrationtest/r/naaj.result b/tests/integrationtest/r/naaj.result index 2dbb670204..2be21d9576 100644 --- a/tests/integrationtest/r/naaj.result +++ b/tests/integrationtest/r/naaj.result @@ -10,7 +10,7 @@ insert into naaj_A values (1,1,1); insert into naaj_B values (1,2,2); explain format = 'brief' select (a, b) not in (select a, b from naaj_B) from naaj_A; id estRows task access object operator info -HashJoin 10000.00 root Null-aware anti left outer semi join, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)] +HashJoin 10000.00 root Null-aware anti left outer semi join, left side:TableReader, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -20,7 +20,7 @@ select (a, b) not in (select a, b from naaj_B) from naaj_A; 1 explain format = 'brief' select * from naaj_A where (a, b) not in (select a, b from naaj_B); id estRows task access object operator info -HashJoin 8000.00 root Null-aware anti semi join, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)] +HashJoin 8000.00 root Null-aware anti semi join, left side:TableReader, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -42,7 +42,7 @@ select * from naaj_A where (a, b) not in (select a, b from naaj_B); a b c explain format = 'brief' select (a, b) not in (select a, b from naaj_B where naaj_A.c > naaj_B.c) from naaj_A; id estRows task access object operator info -HashJoin 10000.00 root Null-aware anti left outer semi join, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:gt(naaj.naaj_a.c, naaj.naaj_b.c) +HashJoin 10000.00 root Null-aware anti left outer semi join, left side:TableReader, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:gt(naaj.naaj_a.c, naaj.naaj_b.c) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -52,7 +52,7 @@ select (a, b) not in (select a, b from naaj_B where naaj_A.c > naaj_B.c) from na 1 explain format = 'brief' select * from naaj_A where (a, b) not in (select a, b from naaj_B where naaj_A.c > naaj_B.c); id estRows task access object operator info -HashJoin 8000.00 root Null-aware anti semi join, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:gt(naaj.naaj_a.c, naaj.naaj_b.c) +HashJoin 8000.00 root Null-aware anti semi join, left side:TableReader, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:gt(naaj.naaj_a.c, naaj.naaj_b.c) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -62,7 +62,7 @@ a b c 1 1 1 explain format = 'brief' select (a, b) not in (select a, b from naaj_B where naaj_A.a != naaj_B.a) from naaj_A; id estRows task access object operator info -HashJoin 10000.00 root Null-aware anti left outer semi join, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:ne(naaj.naaj_a.a, naaj.naaj_b.a) +HashJoin 10000.00 root Null-aware anti left outer semi join, left side:TableReader, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:ne(naaj.naaj_a.a, naaj.naaj_b.a) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -72,7 +72,7 @@ select (a, b) not in (select a, b from naaj_B where naaj_A.a != naaj_B.a) from n 1 explain format = 'brief' select * from naaj_A where (a, b) not in (select a, b from naaj_B where naaj_A.a != naaj_B.a); id estRows task access object operator info -HashJoin 8000.00 root Null-aware anti semi join, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:ne(naaj.naaj_a.a, naaj.naaj_b.a) +HashJoin 8000.00 root Null-aware anti semi join, left side:TableReader, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:ne(naaj.naaj_a.a, naaj.naaj_b.a) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -135,7 +135,7 @@ insert into naaj_B values(2, null, 2); insert into naaj_B values(null, null, 2); explain format = 'brief' select (a, b) not in (select a, b from naaj_B where naaj_A.c > naaj_B.c) from naaj_A; id estRows task access object operator info -HashJoin 10000.00 root Null-aware anti left outer semi join, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:gt(naaj.naaj_a.c, naaj.naaj_b.c) +HashJoin 10000.00 root Null-aware anti left outer semi join, left side:TableReader, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:gt(naaj.naaj_a.c, naaj.naaj_b.c) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -145,7 +145,7 @@ select (a, b) not in (select a, b from naaj_B where naaj_A.c > naaj_B.c) from na 1 explain format = 'brief' select * from naaj_A where (a, b) not in (select a, b from naaj_B where naaj_A.c > naaj_B.c); id estRows task access object operator info -HashJoin 8000.00 root Null-aware anti semi join, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:gt(naaj.naaj_a.c, naaj.naaj_b.c) +HashJoin 8000.00 root Null-aware anti semi join, left side:TableReader, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:gt(naaj.naaj_a.c, naaj.naaj_b.c) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -155,7 +155,7 @@ a b c 1 NULL 1 explain format = 'brief' select (a, b) not in (select a, b from naaj_B where naaj_A.c = naaj_B.c) from naaj_A; id estRows task access object operator info -HashJoin 10000.00 root anti left outer semi join, equal:[eq(naaj.naaj_a.c, naaj.naaj_b.c)], other cond:eq(naaj.naaj_a.a, naaj.naaj_b.a), eq(naaj.naaj_a.b, naaj.naaj_b.b) +HashJoin 10000.00 root anti left outer semi join, left side:TableReader, equal:[eq(naaj.naaj_a.c, naaj.naaj_b.c)], other cond:eq(naaj.naaj_a.a, naaj.naaj_b.a), eq(naaj.naaj_a.b, naaj.naaj_b.b) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -165,7 +165,7 @@ select (a, b) not in (select a, b from naaj_B where naaj_A.c = naaj_B.c) from na 1 explain format = 'brief' select * from naaj_A where (a, b) not in (select a, b from naaj_B where naaj_A.c = naaj_B.c); id estRows task access object operator info -HashJoin 8000.00 root anti semi join, equal:[eq(naaj.naaj_a.c, naaj.naaj_b.c)], other cond:eq(naaj.naaj_a.a, naaj.naaj_b.a), eq(naaj.naaj_a.b, naaj.naaj_b.b) +HashJoin 8000.00 root anti semi join, left side:TableReader, equal:[eq(naaj.naaj_a.c, naaj.naaj_b.c)], other cond:eq(naaj.naaj_a.a, naaj.naaj_b.a), eq(naaj.naaj_a.b, naaj.naaj_b.b) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -183,7 +183,7 @@ insert into naaj_A values (1,1,1); insert into naaj_B values (1,2,2); explain format = 'brief' select (a, b) != all (select a, b from naaj_B) from naaj_A; id estRows task access object operator info -HashJoin 10000.00 root Null-aware anti left outer semi join, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)] +HashJoin 10000.00 root Null-aware anti left outer semi join, left side:TableReader, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -195,7 +195,7 @@ explain format = 'brief' select * from naaj_A where (a, b) != all (select a, b f id estRows task access object operator info Projection 8000.00 root naaj.naaj_a.a, naaj.naaj_a.b, naaj.naaj_a.c └─Selection 8000.00 root Column#9 - └─HashJoin 10000.00 root Null-aware anti left outer semi join, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)] + └─HashJoin 10000.00 root Null-aware anti left outer semi join, left side:TableReader, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -217,7 +217,7 @@ select * from naaj_A where (a, b) != all (select a, b from naaj_B); a b c explain format = 'brief' select (a, b) != all (select a, b from naaj_B where naaj_A.c > naaj_B.c) from naaj_A; id estRows task access object operator info -HashJoin 10000.00 root Null-aware anti left outer semi join, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:gt(naaj.naaj_a.c, naaj.naaj_b.c) +HashJoin 10000.00 root Null-aware anti left outer semi join, left side:TableReader, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:gt(naaj.naaj_a.c, naaj.naaj_b.c) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -229,7 +229,7 @@ explain format = 'brief' select * from naaj_A where (a, b) != all (select a, b f id estRows task access object operator info Projection 8000.00 root naaj.naaj_a.a, naaj.naaj_a.b, naaj.naaj_a.c └─Selection 8000.00 root Column#9 - └─HashJoin 10000.00 root Null-aware anti left outer semi join, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:gt(naaj.naaj_a.c, naaj.naaj_b.c) + └─HashJoin 10000.00 root Null-aware anti left outer semi join, left side:TableReader, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:gt(naaj.naaj_a.c, naaj.naaj_b.c) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -239,7 +239,7 @@ a b c 1 1 1 explain format = 'brief' select (a, b) != all (select a, b from naaj_B where naaj_A.a != naaj_B.a) from naaj_A; id estRows task access object operator info -HashJoin 10000.00 root Null-aware anti left outer semi join, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:ne(naaj.naaj_a.a, naaj.naaj_b.a) +HashJoin 10000.00 root Null-aware anti left outer semi join, left side:TableReader, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:ne(naaj.naaj_a.a, naaj.naaj_b.a) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -251,7 +251,7 @@ explain format = 'brief' select * from naaj_A where (a, b) != all (select a, b f id estRows task access object operator info Projection 8000.00 root naaj.naaj_a.a, naaj.naaj_a.b, naaj.naaj_a.c └─Selection 8000.00 root Column#9 - └─HashJoin 10000.00 root Null-aware anti left outer semi join, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:ne(naaj.naaj_a.a, naaj.naaj_b.a) + └─HashJoin 10000.00 root Null-aware anti left outer semi join, left side:TableReader, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:ne(naaj.naaj_a.a, naaj.naaj_b.a) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -314,7 +314,7 @@ insert into naaj_B values(2, null, 2); insert into naaj_B values(null, null, 2); explain format = 'brief' select (a, b) != all (select a, b from naaj_B where naaj_A.c > naaj_B.c) from naaj_A; id estRows task access object operator info -HashJoin 10000.00 root Null-aware anti left outer semi join, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:gt(naaj.naaj_a.c, naaj.naaj_b.c) +HashJoin 10000.00 root Null-aware anti left outer semi join, left side:TableReader, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:gt(naaj.naaj_a.c, naaj.naaj_b.c) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -326,7 +326,7 @@ explain format = 'brief' select * from naaj_A where (a, b) != all (select a, b f id estRows task access object operator info Projection 8000.00 root naaj.naaj_a.a, naaj.naaj_a.b, naaj.naaj_a.c └─Selection 8000.00 root Column#9 - └─HashJoin 10000.00 root Null-aware anti left outer semi join, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:gt(naaj.naaj_a.c, naaj.naaj_b.c) + └─HashJoin 10000.00 root Null-aware anti left outer semi join, left side:TableReader, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a) eq(naaj.naaj_a.b, naaj.naaj_b.b)], other cond:gt(naaj.naaj_a.c, naaj.naaj_b.c) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -336,7 +336,7 @@ a b c 1 NULL 1 explain format = 'brief' select (a, b) != all (select a, b from naaj_B where naaj_A.c = naaj_B.c) from naaj_A; id estRows task access object operator info -HashJoin 10000.00 root anti left outer semi join, equal:[eq(naaj.naaj_a.c, naaj.naaj_b.c)], other cond:eq(naaj.naaj_a.a, naaj.naaj_b.a), eq(naaj.naaj_a.b, naaj.naaj_b.b) +HashJoin 10000.00 root anti left outer semi join, left side:TableReader, equal:[eq(naaj.naaj_a.c, naaj.naaj_b.c)], other cond:eq(naaj.naaj_a.a, naaj.naaj_b.a), eq(naaj.naaj_a.b, naaj.naaj_b.b) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -348,7 +348,7 @@ explain format = 'brief' select * from naaj_A where (a, b) != all (select a, b f id estRows task access object operator info Projection 8000.00 root naaj.naaj_a.a, naaj.naaj_a.b, naaj.naaj_a.c └─Selection 8000.00 root Column#9 - └─HashJoin 10000.00 root anti left outer semi join, equal:[eq(naaj.naaj_a.c, naaj.naaj_b.c)], other cond:eq(naaj.naaj_a.a, naaj.naaj_b.a), eq(naaj.naaj_a.b, naaj.naaj_b.b) + └─HashJoin 10000.00 root anti left outer semi join, left side:TableReader, equal:[eq(naaj.naaj_a.c, naaj.naaj_b.c)], other cond:eq(naaj.naaj_a.a, naaj.naaj_b.a), eq(naaj.naaj_a.b, naaj.naaj_b.b) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -371,7 +371,7 @@ a b c 1 1 1 explain select (a+1,b*2) not in (select a, b from naaj_B) from naaj_A; id estRows task access object operator info -HashJoin_9 10000.00 root Null-aware anti left outer semi join, equal:[eq(Column#14, naaj.naaj_b.a) eq(Column#15, naaj.naaj_b.b)] +HashJoin_9 10000.00 root Null-aware anti left outer semi join, left side:Projection_10, equal:[eq(Column#14, naaj.naaj_b.a) eq(Column#15, naaj.naaj_b.b)] ├─TableReader_14(Build) 10000.00 root data:TableFullScan_13 │ └─TableFullScan_13 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo └─Projection_10(Probe) 10000.00 root plus(naaj.naaj_a.a, 1)->Column#14, mul(naaj.naaj_a.b, 2)->Column#15 @@ -386,7 +386,7 @@ select (a+1,b*2) not in (select a, b from naaj_B) from naaj_A; 0 explain select * from naaj_A where (a+1,b*2) not in (select a+1, b-1 from naaj_B); id estRows task access object operator info -HashJoin_9 8000.00 root Null-aware anti semi join, equal:[eq(Column#13, Column#9) eq(Column#14, Column#10)] +HashJoin_9 8000.00 root Null-aware anti semi join, left side:Projection_10, equal:[eq(Column#13, Column#9) eq(Column#14, Column#10)] ├─Projection_13(Build) 10000.00 root plus(naaj.naaj_b.a, 1)->Column#9, minus(naaj.naaj_b.b, 1)->Column#10 │ └─TableReader_15 10000.00 root data:TableFullScan_14 │ └─TableFullScan_14 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo @@ -397,14 +397,14 @@ select * from naaj_A where (a+1,b*2) not in (select a, b from naaj_B); a b c explain select (a+1,b*2) not in (select a, b=1 from naaj_B where naaj_A.a = naaj_B.a) from naaj_A; id estRows task access object operator info -HashJoin_9 10000.00 root anti left outer semi join, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a)], other cond:eq(mul(naaj.naaj_a.b, 2), eq(naaj.naaj_b.b, 1)), eq(plus(naaj.naaj_a.a, 1), naaj.naaj_b.a) +HashJoin_9 10000.00 root anti left outer semi join, left side:TableReader_11, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a)], other cond:eq(mul(naaj.naaj_a.b, 2), eq(naaj.naaj_b.b, 1)), eq(plus(naaj.naaj_a.a, 1), naaj.naaj_b.a) ├─TableReader_13(Build) 10000.00 root data:TableFullScan_12 │ └─TableFullScan_12 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo └─TableReader_11(Probe) 10000.00 root data:TableFullScan_10 └─TableFullScan_10 10000.00 cop[tikv] table:naaj_A keep order:false, stats:pseudo explain select * from naaj_A where (a+1,b*2) not in (select a, b=1 from naaj_B where naaj_A.a = naaj_B.a); id estRows task access object operator info -HashJoin_9 8000.00 root anti semi join, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a)], other cond:eq(mul(naaj.naaj_a.b, 2), eq(naaj.naaj_b.b, 1)), eq(plus(naaj.naaj_a.a, 1), naaj.naaj_b.a) +HashJoin_9 8000.00 root anti semi join, left side:TableReader_11, equal:[eq(naaj.naaj_a.a, naaj.naaj_b.a)], other cond:eq(mul(naaj.naaj_a.b, 2), eq(naaj.naaj_b.b, 1)), eq(plus(naaj.naaj_a.a, 1), naaj.naaj_b.a) ├─TableReader_13(Build) 10000.00 root data:TableFullScan_12 │ └─TableFullScan_12 10000.00 cop[tikv] table:naaj_B keep order:false, stats:pseudo └─TableReader_11(Probe) 10000.00 root data:TableFullScan_10 diff --git a/tests/integrationtest/r/planner/cascades/integration.result b/tests/integrationtest/r/planner/cascades/integration.result index 7bfa97a759..241bc7ba1e 100644 --- a/tests/integrationtest/r/planner/cascades/integration.result +++ b/tests/integrationtest/r/planner/cascades/integration.result @@ -772,7 +772,7 @@ explain format = 'brief' select t1.a, t1.b from t1 left join t2 on t1.a = t2.a w id estRows task access object operator info Projection 3333.33 root planner__cascades__integration.t1.a, planner__cascades__integration.t1.b └─Selection 3333.33 root gt(planner__cascades__integration.t2.b, 200) - └─MergeJoin 4166.67 root left outer join, left key:planner__cascades__integration.t1.a, right key:planner__cascades__integration.t2.a + └─MergeJoin 4166.67 root left outer join, left side:TableReader, left key:planner__cascades__integration.t1.a, right key:planner__cascades__integration.t2.a ├─TableReader(Build) 3333.33 root data:TableRangeScan │ └─TableRangeScan 3333.33 cop[tikv] table:t2 range:(2,+inf], keep order:true, stats:pseudo └─TableReader(Probe) 3333.33 root data:TableRangeScan @@ -784,7 +784,7 @@ explain format = 'brief' select t2.a, t2.b from t1 right join t2 on t1.a = t2.a id estRows task access object operator info Projection 8000.00 root planner__cascades__integration.t2.a, planner__cascades__integration.t2.b └─Selection 8000.00 root gt(planner__cascades__integration.t1.a, 2) - └─MergeJoin 10000.00 root right outer join, left key:planner__cascades__integration.t1.a, right key:planner__cascades__integration.t2.a + └─MergeJoin 10000.00 root right outer join, left side:TableReader, left key:planner__cascades__integration.t1.a, right key:planner__cascades__integration.t2.a ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:true, stats:pseudo └─TableReader(Probe) 8000.00 root data:Selection @@ -837,7 +837,7 @@ set session tidb_enable_cascades_planner = 1; explain select a = (select a from t2 where t1.b = t2.b order by a limit 1) from t1; id estRows task access object operator info Projection_19 10000.00 root eq(planner__cascades__integration.t1.a, planner__cascades__integration.t2.a)->Column#7 -└─Apply_21 10000.00 root CARTESIAN left outer join +└─Apply_21 10000.00 root CARTESIAN left outer join, left side:TableReader_22 ├─TableReader_22(Build) 10000.00 root data:TableFullScan_23 │ └─TableFullScan_23 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─MaxOneRow_24(Probe) 1.00 root @@ -856,8 +856,8 @@ NULL explain select sum(a), (select t1.a from t1 where t1.a = t2.a limit 1), (select t1.b from t1 where t1.b = t2.b limit 1) from t2; id estRows task access object operator info Projection_32 1.00 root Column#7, planner__cascades__integration.t1.a, planner__cascades__integration.t1.b -└─Apply_34 1.00 root CARTESIAN left outer join - ├─Apply_36(Build) 1.00 root CARTESIAN left outer join +└─Apply_34 1.00 root CARTESIAN left outer join, left side:Apply_36 + ├─Apply_36(Build) 1.00 root CARTESIAN left outer join, left side:HashAgg_41 │ ├─HashAgg_41(Build) 1.00 root funcs:sum(Column#12)->Column#7, funcs:firstrow(Column#13)->planner__cascades__integration.t2.a, funcs:firstrow(Column#14)->planner__cascades__integration.t2.b │ │ └─TableReader_42 1.00 root data:HashAgg_43 │ │ └─HashAgg_43 1.00 cop[tikv] funcs:sum(planner__cascades__integration.t2.a)->Column#12, funcs:firstrow(planner__cascades__integration.t2.a)->Column#13, funcs:firstrow(planner__cascades__integration.t2.b)->Column#14 @@ -879,7 +879,7 @@ sum(a) (select t1.a from t1 where t1.a = t2.a limit 1) (select t1.b from t1 wher 6 1 11 explain select a from t1 where exists(select 1 from t2 where t1.a = t2.a); id estRows task access object operator info -MergeJoin_30 10000.00 root semi join, left key:planner__cascades__integration.t1.a, right key:planner__cascades__integration.t2.a +MergeJoin_30 10000.00 root semi join, left side:TableReader_32, left key:planner__cascades__integration.t1.a, right key:planner__cascades__integration.t2.a ├─TableReader_35(Build) 10000.00 root data:TableFullScan_36 │ └─TableFullScan_36 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo └─TableReader_32(Probe) 10000.00 root data:TableFullScan_33 diff --git a/tests/integrationtest/r/planner/core/casetest/expression_rewriter.result b/tests/integrationtest/r/planner/core/casetest/expression_rewriter.result index a20573d54b..fd6067b8fb 100644 --- a/tests/integrationtest/r/planner/core/casetest/expression_rewriter.result +++ b/tests/integrationtest/r/planner/core/casetest/expression_rewriter.result @@ -22,7 +22,7 @@ a b 1 1 explain format = 'brief' select * from t1 where (t1.a, t1.b) not in (select a, b from t2); id estRows task access object operator info -HashJoin 3.20 root Null-aware anti semi join, equal:[eq(planner__core__casetest__expression_rewriter.t1.a, planner__core__casetest__expression_rewriter.t2.a) eq(planner__core__casetest__expression_rewriter.t1.b, planner__core__casetest__expression_rewriter.t2.b)] +HashJoin 3.20 root Null-aware anti semi join, left side:TableReader, equal:[eq(planner__core__casetest__expression_rewriter.t1.a, planner__core__casetest__expression_rewriter.t2.a) eq(planner__core__casetest__expression_rewriter.t1.b, planner__core__casetest__expression_rewriter.t2.b)] ├─TableReader(Build) 4.00 root data:TableFullScan │ └─TableFullScan 4.00 cop[tikv] table:t2 keep order:false └─TableReader(Probe) 4.00 root data:TableFullScan @@ -46,7 +46,7 @@ a 1 explain format = 'brief' select t1.a from t1 group by t1.a having (a, count(1)) not in (select a, b from t2); id estRows task access object operator info -HashJoin 2.40 root Null-aware anti semi join, equal:[eq(planner__core__casetest__expression_rewriter.t1.a, planner__core__casetest__expression_rewriter.t2.a) eq(Column#7, planner__core__casetest__expression_rewriter.t2.b)] +HashJoin 2.40 root Null-aware anti semi join, left side:HashAgg, equal:[eq(planner__core__casetest__expression_rewriter.t1.a, planner__core__casetest__expression_rewriter.t2.a) eq(Column#7, planner__core__casetest__expression_rewriter.t2.b)] ├─TableReader(Build) 4.00 root data:TableFullScan │ └─TableFullScan 4.00 cop[tikv] table:t2 keep order:false └─HashAgg(Probe) 3.00 root group by:planner__core__casetest__expression_rewriter.t1.a, funcs:count(1)->Column#7, funcs:firstrow(planner__core__casetest__expression_rewriter.t1.a)->planner__core__casetest__expression_rewriter.t1.a diff --git a/tests/integrationtest/r/planner/core/casetest/index/index.result b/tests/integrationtest/r/planner/core/casetest/index/index.result index a1c3f189df..3989c2b61c 100644 --- a/tests/integrationtest/r/planner/core/casetest/index/index.result +++ b/tests/integrationtest/r/planner/core/casetest/index/index.result @@ -328,7 +328,7 @@ a b c d a b c d 3 333 3.3000000000 13 3 333 3.3000000000 13 explain format = 'brief'select /*+ inl_merge_join(t1,t2) */ t2.a, t2.c, t2.d from t t1 left join t t2 on t1.a = t2.c; id estRows task access object operator info -HashJoin 3.00 root left outer join, equal:[eq(Column#9, planner__core__casetest__index__index.t.c)] +HashJoin 3.00 root left outer join, left side:Projection, equal:[eq(Column#9, planner__core__casetest__index__index.t.c)] ├─Projection(Build) 3.00 root cast(planner__core__casetest__index__index.t.a, decimal(10,0) BINARY)->Column#9 │ └─IndexReader 3.00 root index:IndexFullScan │ └─IndexFullScan 3.00 cop[tikv] table:t1, index:c(c) keep order:false diff --git a/tests/integrationtest/r/planner/core/casetest/integration.result b/tests/integrationtest/r/planner/core/casetest/integration.result index ae70cbcea4..9df2e69501 100644 --- a/tests/integrationtest/r/planner/core/casetest/integration.result +++ b/tests/integrationtest/r/planner/core/casetest/integration.result @@ -54,7 +54,7 @@ drop table if exists t; create table t(a int not null, b datetime default null); explain format = 'brief' select * from t t1 left join t t2 on t1.a = t2.a where cast(t1.b as date) >= '2019-01-01'; id estRows task access object operator info -HashJoin 10000.00 root left outer join, equal:[eq(planner__core__casetest__integration.t.a, planner__core__casetest__integration.t.a)] +HashJoin 10000.00 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__integration.t.a, planner__core__casetest__integration.t.a)] ├─TableReader(Build) 8000.00 root data:Selection │ └─Selection 8000.00 cop[tikv] ge(cast(planner__core__casetest__integration.t.b, date BINARY), 2019-01-01 00:00:00.000000) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -170,7 +170,7 @@ create table t(a int, b int); desc format = 'brief' select t1.b from t t1 where t1.b in (select t2.a from t t2 order by t1.a+t2.a limit 1); id estRows task access object operator info Projection 9990.00 root planner__core__casetest__integration.t.b -└─Apply 9990.00 root semi join, equal:[eq(planner__core__casetest__integration.t.b, planner__core__casetest__integration.t.a)] +└─Apply 9990.00 root semi join, left side:TableReader, equal:[eq(planner__core__casetest__integration.t.b, planner__core__casetest__integration.t.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__integration.t.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -187,7 +187,7 @@ Projection 1.00 root planner__core__casetest__integration.t.a └─Projection 1.00 root planner__core__casetest__integration.t.a, planner__core__casetest__integration.t.b, Column#11 └─TopN 1.00 root Column#13, offset:0, count:1 └─Projection 10000.00 root planner__core__casetest__integration.t.a, planner__core__casetest__integration.t.b, Column#11, and(eq(planner__core__casetest__integration.t.b, 1), Column#11)->Column#13 - └─HashJoin 10000.00 root left outer semi join, equal:[eq(planner__core__casetest__integration.t.b, planner__core__casetest__integration.t.b)] + └─HashJoin 10000.00 root left outer semi join, left side:TableReader, equal:[eq(planner__core__casetest__integration.t.b, planner__core__casetest__integration.t.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -373,7 +373,7 @@ create table t(a int, b int); insert into t values(1, 2), (3, 4); explain format = 'brief' select (2) in (select b from t) from (select t.a < (select t.a from t t1 limit 1) from t) t; id estRows task access object operator info -HashJoin 10000.00 root CARTESIAN left outer semi join, other cond:eq(2, planner__core__casetest__integration.t.b) +HashJoin 10000.00 root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(2, planner__core__casetest__integration.t.b) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -456,7 +456,7 @@ drop table if exists t; create table t(a int not null, b int not null); explain format = 'brief' select * from t where exists (select 1 from t t1 join t t2 where t1.a = t2.a and t1.a = t.a); id estRows task access object operator info -HashJoin 8000.00 root semi join, equal:[eq(planner__core__casetest__integration.t.a, planner__core__casetest__integration.t.a)] +HashJoin 8000.00 root semi join, left side:TableReader, equal:[eq(planner__core__casetest__integration.t.a, planner__core__casetest__integration.t.a)] ├─HashJoin(Build) 12500.00 root inner join, equal:[eq(planner__core__casetest__integration.t.a, planner__core__casetest__integration.t.a)] │ ├─TableReader(Build) 10000.00 root data:TableFullScan │ │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -466,7 +466,7 @@ HashJoin 8000.00 root semi join, equal:[eq(planner__core__casetest__integration └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo explain format = 'brief' select * from t where exists (select 1 from t t1 join t t2 on t1.a = t2.a and t1.a = t.a); id estRows task access object operator info -HashJoin 8000.00 root semi join, equal:[eq(planner__core__casetest__integration.t.a, planner__core__casetest__integration.t.a)] +HashJoin 8000.00 root semi join, left side:TableReader, equal:[eq(planner__core__casetest__integration.t.a, planner__core__casetest__integration.t.a)] ├─HashJoin(Build) 12500.00 root inner join, equal:[eq(planner__core__casetest__integration.t.a, planner__core__casetest__integration.t.a)] │ ├─TableReader(Build) 10000.00 root data:TableFullScan │ │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -526,7 +526,7 @@ insert t values(10), (8), (7), (9), (11); explain format = 'brief' select count(*) from test t1 where exists (select value from test t2 where t1.id = t2.id limit 1); id estRows task access object operator info HashAgg 1.00 root funcs:count(1)->Column#7 -└─HashJoin 7992.00 root semi join, equal:[eq(planner__core__casetest__integration.test.id, planner__core__casetest__integration.test.id)] +└─HashJoin 7992.00 root semi join, left side:TableReader, equal:[eq(planner__core__casetest__integration.test.id, planner__core__casetest__integration.test.id)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__integration.test.id)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -536,7 +536,7 @@ HashAgg 1.00 root funcs:count(1)->Column#7 explain format = 'brief' select count(*) from test t1 where exists (select value from test t2 where t1.id = t2.id); id estRows task access object operator info HashAgg 1.00 root funcs:count(1)->Column#7 -└─HashJoin 7992.00 root semi join, equal:[eq(planner__core__casetest__integration.test.id, planner__core__casetest__integration.test.id)] +└─HashJoin 7992.00 root semi join, left side:TableReader, equal:[eq(planner__core__casetest__integration.test.id, planner__core__casetest__integration.test.id)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__integration.test.id)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -546,7 +546,7 @@ HashAgg 1.00 root funcs:count(1)->Column#7 explain format = 'brief' select count(*) from test t1 where exists (select value from test t2 where t1.id = t2.id limit 1,2); id estRows task access object operator info HashAgg 1.00 root funcs:count(1)->Column#7 -└─Apply 10000.00 root CARTESIAN semi join +└─Apply 10000.00 root CARTESIAN semi join, left side:TableReader ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─Limit(Probe) 20000.00 root offset:1, count:2 @@ -556,7 +556,7 @@ HashAgg 1.00 root funcs:count(1)->Column#7 └─TableFullScan 30000000.00 cop[tikv] table:t2 keep order:false, stats:pseudo explain format = 'brief' select * from t where 9 in (select c from t s where s.c < t.c limit 3); id estRows task access object operator info -Apply 10000.00 root CARTESIAN semi join +Apply 10000.00 root CARTESIAN semi join, left side:TableReader ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo └─Selection(Probe) 24000.00 root eq(9, planner__core__casetest__integration.t.c) @@ -1043,7 +1043,7 @@ create table t1(a int); create table t2(a int, b int, c int, primary key(a,b) nonclustered); explain format = 'brief' select (select c from t2 where t2.a = t1.a and t2.b = 1) from t1; id estRows task access object operator info -HashJoin 10000.00 root left outer join, equal:[eq(planner__core__casetest__integration.t1.a, planner__core__casetest__integration.t2.a)] +HashJoin 10000.00 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__integration.t1.a, planner__core__casetest__integration.t2.a)] ├─TableReader(Build) 10.00 root data:Selection │ └─Selection 10.00 cop[tikv] eq(planner__core__casetest__integration.t2.b, 1) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -1052,7 +1052,7 @@ HashJoin 10000.00 root left outer join, equal:[eq(planner__core__casetest__inte explain format = 'brief' select (select c from t2 where t2.a = t1.a and (t2.b = 1 or t2.b = 2)) from t1; id estRows task access object operator info Projection 10000.00 root planner__core__casetest__integration.t2.c -└─Apply 10000.00 root CARTESIAN left outer join +└─Apply 10000.00 root CARTESIAN left outer join, left side:TableReader ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─MaxOneRow(Probe) 10000.00 root @@ -1423,7 +1423,7 @@ set @@tidb_skip_missing_partition_stats = off; set @@tidb_opt_fix_control = ""; explain select /*+ TIDB_INLJ(t2_part@sel_2) */ * from t1 where t1.b<10 and not exists (select 1 from t2_part where t1.a=t2_part.a and t2_part.b<20); id estRows task access object operator info -HashJoin_19 2658.67 root anti semi join, equal:[eq(planner__core__casetest__integration.t1.a, planner__core__casetest__integration.t2_part.a)] +HashJoin_19 2658.67 root anti semi join, left side:TableReader_22, equal:[eq(planner__core__casetest__integration.t1.a, planner__core__casetest__integration.t2_part.a)] ├─PartitionUnion_23(Build) 13293.33 root │ ├─TableReader_31 3323.33 root data:Projection_25 │ │ └─Projection_25 3323.33 cop[tikv] planner__core__casetest__integration.t2_part.a @@ -1450,7 +1450,7 @@ Warning 1815 Optimizer Hint /*+ INL_JOIN(t2_part) */ or /*+ TIDB_INLJ(t2_part) * set @@tidb_opt_fix_control = "44262:ON"; explain select /*+ TIDB_INLJ(t2_part@sel_2) */ * from t1 where t1.b<10 and not exists (select 1 from t2_part where t1.a=t2_part.a and t2_part.b<20); id estRows task access object operator info -IndexJoin_13 2658.67 root anti semi join, inner:IndexLookUp_12, outer key:planner__core__casetest__integration.t1.a, inner key:planner__core__casetest__integration.t2_part.a, equal cond:eq(planner__core__casetest__integration.t1.a, planner__core__casetest__integration.t2_part.a) +IndexJoin_13 2658.67 root anti semi join, inner:IndexLookUp_12, left side:TableReader_18, outer key:planner__core__casetest__integration.t1.a, inner key:planner__core__casetest__integration.t2_part.a, equal cond:eq(planner__core__casetest__integration.t1.a, planner__core__casetest__integration.t2_part.a) ├─TableReader_18(Build) 3323.33 root data:Selection_17 │ └─Selection_17 3323.33 cop[tikv] lt(planner__core__casetest__integration.t1.b, 10) │ └─TableFullScan_16 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -1462,7 +1462,7 @@ set @@tidb_opt_fix_control = ""; set @@tidb_skip_missing_partition_stats = on; explain select /*+ TIDB_INLJ(t2_part@sel_2) */ * from t1 where t1.b<10 and not exists (select 1 from t2_part where t1.a=t2_part.a and t2_part.b<20); id estRows task access object operator info -IndexJoin_13 2658.67 root anti semi join, inner:IndexLookUp_12, outer key:planner__core__casetest__integration.t1.a, inner key:planner__core__casetest__integration.t2_part.a, equal cond:eq(planner__core__casetest__integration.t1.a, planner__core__casetest__integration.t2_part.a) +IndexJoin_13 2658.67 root anti semi join, inner:IndexLookUp_12, left side:TableReader_18, outer key:planner__core__casetest__integration.t1.a, inner key:planner__core__casetest__integration.t2_part.a, equal cond:eq(planner__core__casetest__integration.t1.a, planner__core__casetest__integration.t2_part.a) ├─TableReader_18(Build) 3323.33 root data:Selection_17 │ └─Selection_17 3323.33 cop[tikv] lt(planner__core__casetest__integration.t1.b, 10) │ └─TableFullScan_16 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo diff --git a/tests/integrationtest/r/planner/core/casetest/physicalplantest/physical_plan.result b/tests/integrationtest/r/planner/core/casetest/physicalplantest/physical_plan.result index 8a846eb9bd..ee72a274fc 100644 --- a/tests/integrationtest/r/planner/core/casetest/physicalplantest/physical_plan.result +++ b/tests/integrationtest/r/planner/core/casetest/physicalplantest/physical_plan.result @@ -5,7 +5,7 @@ insert into t1 values(1,1),(2,2); insert into t2 values(1,1),(2,1); explain format = 'brief' select /*+ inl_merge_join(t2) */ t1.a, t2.a from t1 left join t2 on t1.a=t2.a and t1.b=t2.b; id estRows task access object operator info -HashJoin 12500.00 root left outer join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a) eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b)] +HashJoin 12500.00 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a) eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -16,7 +16,7 @@ a a 2 NULL explain format = 'brief' select /*+ inl_hash_join(t2) */ t1.a, t2.a from t1 left join t2 on t1.a=t2.a and t1.b=t2.b; id estRows task access object operator info -IndexHashJoin 12500.00 root left outer join, inner:TableReader, outer key:planner__core__casetest__physicalplantest__physical_plan.t1.a, inner key:planner__core__casetest__physicalplantest__physical_plan.t2.a, equal cond:eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a), eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b) +IndexHashJoin 12500.00 root left outer join, inner:TableReader, left side:TableReader, outer key:planner__core__casetest__physicalplantest__physical_plan.t1.a, inner key:planner__core__casetest__physicalplantest__physical_plan.t2.a, equal cond:eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a), eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableRangeScan @@ -27,7 +27,7 @@ a a 2 NULL explain format = 'brief' select /*+ inl_join(t2) */ t1.a, t2.a from t1 left join t2 on t1.a=t2.a and t1.b=t2.b; id estRows task access object operator info -IndexJoin 12500.00 root left outer join, inner:TableReader, outer key:planner__core__casetest__physicalplantest__physical_plan.t1.a, inner key:planner__core__casetest__physicalplantest__physical_plan.t2.a, equal cond:eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a), eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b) +IndexJoin 12500.00 root left outer join, inner:TableReader, left side:TableReader, outer key:planner__core__casetest__physicalplantest__physical_plan.t1.a, inner key:planner__core__casetest__physicalplantest__physical_plan.t2.a, equal cond:eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a), eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableRangeScan @@ -38,7 +38,7 @@ a a 2 NULL explain format = 'brief' select /*+ hash_join(t2) */ t1.a, t2.a from t1 left join t2 on t1.a=t2.a and t1.b=t2.b; id estRows task access object operator info -HashJoin 12500.00 root left outer join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a) eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b)] +HashJoin 12500.00 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a) eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1267,7 +1267,7 @@ Sort 0.80 root planner__core__casetest__physicalplantest__physical_plan.pk_s_mu └─Projection 0.80 root planner__core__casetest__physicalplantest__physical_plan.pk_s_multi_31.col2 └─Selection 0.80 root gt(Column#7, 2) └─HashAgg 1.00 root group by:planner__core__casetest__physicalplantest__physical_plan.pk_s_multi_31.col1, planner__core__casetest__physicalplantest__physical_plan.pk_s_multi_31.col2, funcs:firstrow(planner__core__casetest__physicalplantest__physical_plan.pk_s_multi_31.col2)->planner__core__casetest__physicalplantest__physical_plan.pk_s_multi_31.col2, funcs:count(distinct planner__core__casetest__physicalplantest__physical_plan.pk_s_multi_31.col1, planner__core__casetest__physicalplantest__physical_plan.pk_s_multi_31.col2)->Column#7 - └─HashJoin 100000000.00 root CARTESIAN left outer join, other cond:gt(planner__core__casetest__physicalplantest__physical_plan.pk_s_multi_31.col1, planner__core__casetest__physicalplantest__physical_plan.pk_s_multi_31.col1) + └─HashJoin 100000000.00 root CARTESIAN left outer join, left side:IndexReader, other cond:gt(planner__core__casetest__physicalplantest__physical_plan.pk_s_multi_31.col1, planner__core__casetest__physicalplantest__physical_plan.pk_s_multi_31.col1) ├─IndexReader(Build) 10000.00 root index:IndexFullScan │ └─IndexFullScan 10000.00 cop[tikv] table:T2, index:PRIMARY(COL1, COL2) keep order:false, stats:pseudo └─IndexReader(Probe) 10000.00 root index:IndexFullScan @@ -1463,7 +1463,7 @@ show warnings; Level Code Message explain format = 'brief' select /*+ hash_join_build(t2) */ t1.a, t2.a from t1 left join t2 on t1.a=t2.a and t1.b=t2.b; id estRows task access object operator info -HashJoin 12500.00 root left outer join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a) eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b)] +HashJoin 12500.00 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a) eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1476,7 +1476,7 @@ show warnings; Level Code Message explain format = 'brief' select /*+ hash_join_probe(t2) */ t1.a, t2.a from t1 left join t2 on t1.a=t2.a and t1.b=t2.b; id estRows task access object operator info -HashJoin 12500.00 root left outer join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a) eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b)] +HashJoin 12500.00 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a) eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1489,7 +1489,7 @@ show warnings; Level Code Message explain format = 'brief' select /*+ hash_join_build(t1) */ t1.a, t2.a from t1 left join t2 on t1.a=t2.a and t1.b=t2.b; id estRows task access object operator info -HashJoin 12500.00 root left outer join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a) eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b)] +HashJoin 12500.00 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a) eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1502,7 +1502,7 @@ show warnings; Level Code Message explain format = 'brief' select /*+ hash_join_probe(t1) */ t1.a, t2.a from t1 left join t2 on t1.a=t2.a and t1.b=t2.b; id estRows task access object operator info -HashJoin 12500.00 root left outer join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a) eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b)] +HashJoin 12500.00 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a) eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1515,7 +1515,7 @@ show warnings; Level Code Message explain format = 'brief' select /*+ hash_join_build(t2) */ t1.a, t2.a from t1 right join t2 on t1.a=t2.a and t1.b=t2.b; id estRows task access object operator info -HashJoin 12500.00 root right outer join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a) eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b)] +HashJoin 12500.00 root right outer join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a) eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1528,7 +1528,7 @@ show warnings; Level Code Message explain format = 'brief' select /*+ hash_join_probe(t2) */ t1.a, t2.a from t1 right join t2 on t1.a=t2.a and t1.b=t2.b; id estRows task access object operator info -HashJoin 12500.00 root right outer join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a) eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b)] +HashJoin 12500.00 root right outer join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a) eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1541,7 +1541,7 @@ show warnings; Level Code Message explain format = 'brief' select /*+ hash_join_build(t1) */ t1.a, t2.a from t1 right join t2 on t1.a=t2.a and t1.b=t2.b; id estRows task access object operator info -HashJoin 12500.00 root right outer join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a) eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b)] +HashJoin 12500.00 root right outer join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a) eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1554,7 +1554,7 @@ show warnings; Level Code Message explain format = 'brief' select /*+ hash_join_probe(t1) */ t1.a, t2.a from t1 right join t2 on t1.a=t2.a and t1.b=t2.b; id estRows task access object operator info -HashJoin 12500.00 root right outer join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a) eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b)] +HashJoin 12500.00 root right outer join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a) eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1663,7 +1663,7 @@ show warnings; Level Code Message explain format = 'brief' select /*+ hash_join_build(t1) */ * from t1 where t1.a in (select t2.a from t2 where t1.b = t2.b); id estRows task access object operator info -HashJoin 8000.00 root semi join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b) eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a)] +HashJoin 8000.00 root semi join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b) eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1676,7 +1676,7 @@ Level Code Message Warning 1815 We can't use the HASH_JOIN_BUILD or HASH_JOIN_PROBE hint for semi join, please check the hint explain format = 'brief' select /*+ hash_join_probe(t1) */ * from t1 where t1.a in (select t2.a from t2 where t1.b = t2.b); id estRows task access object operator info -HashJoin 8000.00 root semi join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b) eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a)] +HashJoin 8000.00 root semi join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b) eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1689,7 +1689,7 @@ Level Code Message Warning 1815 We can't use the HASH_JOIN_BUILD or HASH_JOIN_PROBE hint for semi join, please check the hint explain format = 'brief' select /*+ hash_join_build(t2@sel_2) */ * from t1 where t1.a in (select t2.a from t2 where t1.b = t2.b); id estRows task access object operator info -HashJoin 8000.00 root semi join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b) eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a)] +HashJoin 8000.00 root semi join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b) eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1702,7 +1702,7 @@ Level Code Message Warning 1815 We can't use the HASH_JOIN_BUILD or HASH_JOIN_PROBE hint for semi join, please check the hint explain format = 'brief' select /*+ hash_join_probe(t2@sel_2) */ * from t1 where t1.a in (select t2.a from t2 where t1.b = t2.b); id estRows task access object operator info -HashJoin 8000.00 root semi join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b) eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a)] +HashJoin 8000.00 root semi join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b) eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1715,7 +1715,7 @@ Level Code Message Warning 1815 We can't use the HASH_JOIN_BUILD or HASH_JOIN_PROBE hint for semi join, please check the hint explain format = 'brief' select /*+ hash_join_build(t1) */ * from t1 where t1.a not in (select t2.a from t2 where t1.b = t2.b); id estRows task access object operator info -HashJoin 8000.00 root anti semi join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b) eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a)] +HashJoin 8000.00 root anti semi join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b) eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1728,7 +1728,7 @@ Level Code Message Warning 1815 We can't use the HASH_JOIN_BUILD or HASH_JOIN_PROBE hint for anti semi join, please check the hint explain format = 'brief' select /*+ hash_join_probe(t1) */ * from t1 where t1.a not in (select t2.a from t2 where t1.b = t2.b); id estRows task access object operator info -HashJoin 8000.00 root anti semi join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b) eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a)] +HashJoin 8000.00 root anti semi join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b) eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1741,7 +1741,7 @@ Level Code Message Warning 1815 We can't use the HASH_JOIN_BUILD or HASH_JOIN_PROBE hint for anti semi join, please check the hint explain format = 'brief' select /*+ hash_join_build(t2@sel_2) */ * from t1 where t1.a not in (select t2.a from t2 where t1.b = t2.b); id estRows task access object operator info -HashJoin 8000.00 root anti semi join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b) eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a)] +HashJoin 8000.00 root anti semi join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b) eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1754,7 +1754,7 @@ Level Code Message Warning 1815 We can't use the HASH_JOIN_BUILD or HASH_JOIN_PROBE hint for anti semi join, please check the hint explain format = 'brief' select /*+ hash_join_probe(t2@sel_2) */ * from t1 where t1.a not in (select t2.a from t2 where t1.b = t2.b); id estRows task access object operator info -HashJoin 8000.00 root anti semi join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b) eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a)] +HashJoin 8000.00 root anti semi join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b) eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1769,7 +1769,7 @@ explain format = 'brief' select /*+ hash_join_build(t1) */ sum(t1.a in (select a id estRows task access object operator info HashAgg 1.00 root funcs:sum(Column#9)->Column#8 └─Projection 10000.00 root cast(Column#7, decimal(3,0) BINARY)->Column#9 - └─MergeJoin 10000.00 root left outer semi join, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a + └─MergeJoin 10000.00 root left outer semi join, left side:TableReader, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1785,7 +1785,7 @@ explain format = 'brief' select /*+ hash_join_probe(t1) */ sum(t1.a in (select a id estRows task access object operator info HashAgg 1.00 root funcs:sum(Column#9)->Column#8 └─Projection 10000.00 root cast(Column#7, decimal(3,0) BINARY)->Column#9 - └─MergeJoin 10000.00 root left outer semi join, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a + └─MergeJoin 10000.00 root left outer semi join, left side:TableReader, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1801,7 +1801,7 @@ explain format = 'brief' select /*+ hash_join_build(t2@sel_2) */ sum(t1.a in (se id estRows task access object operator info HashAgg 1.00 root funcs:sum(Column#9)->Column#8 └─Projection 10000.00 root cast(Column#7, decimal(3,0) BINARY)->Column#9 - └─MergeJoin 10000.00 root left outer semi join, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a + └─MergeJoin 10000.00 root left outer semi join, left side:TableReader, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1817,7 +1817,7 @@ explain format = 'brief' select /*+ hash_join_probe(t2@sel_2) */ sum(t1.a in (se id estRows task access object operator info HashAgg 1.00 root funcs:sum(Column#9)->Column#8 └─Projection 10000.00 root cast(Column#7, decimal(3,0) BINARY)->Column#9 - └─MergeJoin 10000.00 root left outer semi join, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a + └─MergeJoin 10000.00 root left outer semi join, left side:TableReader, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1833,7 +1833,7 @@ explain format = 'brief' select /*+ hash_join_build(t1) */ sum(t1.a not in (sele id estRows task access object operator info HashAgg 1.00 root funcs:sum(Column#9)->Column#8 └─Projection 10000.00 root cast(Column#7, decimal(3,0) BINARY)->Column#9 - └─MergeJoin 10000.00 root anti left outer semi join, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a + └─MergeJoin 10000.00 root anti left outer semi join, left side:TableReader, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1849,7 +1849,7 @@ explain format = 'brief' select /*+ hash_join_probe(t1) */ sum(t1.a not in (sele id estRows task access object operator info HashAgg 1.00 root funcs:sum(Column#9)->Column#8 └─Projection 10000.00 root cast(Column#7, decimal(3,0) BINARY)->Column#9 - └─MergeJoin 10000.00 root anti left outer semi join, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a + └─MergeJoin 10000.00 root anti left outer semi join, left side:TableReader, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1865,7 +1865,7 @@ explain format = 'brief' select /*+ hash_join_build(t2@sel_2) */ sum(t1.a not in id estRows task access object operator info HashAgg 1.00 root funcs:sum(Column#9)->Column#8 └─Projection 10000.00 root cast(Column#7, decimal(3,0) BINARY)->Column#9 - └─MergeJoin 10000.00 root anti left outer semi join, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a + └─MergeJoin 10000.00 root anti left outer semi join, left side:TableReader, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -1881,7 +1881,7 @@ explain format = 'brief' select /*+ hash_join_probe(t2@sel_2) */ sum(t1.a not in id estRows task access object operator info HashAgg 1.00 root funcs:sum(Column#9)->Column#8 └─Projection 10000.00 root cast(Column#7, decimal(3,0) BINARY)->Column#9 - └─MergeJoin 10000.00 root anti left outer semi join, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a + └─MergeJoin 10000.00 root anti left outer semi join, left side:TableReader, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -2379,7 +2379,7 @@ Level Code Message Warning 1815 Join hints are conflict, you can only specify one type of join explain format = 'brief' SELECT * FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE t2.a = t1.a); id estRows task access object operator info -MergeJoin 8000.00 root semi join, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a +MergeJoin 8000.00 root semi join, left side:TableReader, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -2392,7 +2392,7 @@ show warnings; Level Code Message explain format = 'brief' SELECT /*+ hash_join_probe(t1) */ * FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE t2.a = t1.a); id estRows task access object operator info -MergeJoin 8000.00 root semi join, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a +MergeJoin 8000.00 root semi join, left side:TableReader, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -2406,7 +2406,7 @@ Level Code Message Warning 1815 We can't use the HASH_JOIN_BUILD or HASH_JOIN_PROBE hint for semi join, please check the hint explain format = 'brief' SELECT /*+ hash_join_probe(t2@sel_2) */ * FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE t2.a = t1.a); id estRows task access object operator info -MergeJoin 8000.00 root semi join, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a +MergeJoin 8000.00 root semi join, left side:TableReader, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -2450,7 +2450,7 @@ show warnings; Level Code Message explain format = 'brief' SELECT /*+ hash_join_build(t1) */ * FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE t2.a = t1.a); id estRows task access object operator info -MergeJoin 8000.00 root semi join, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a +MergeJoin 8000.00 root semi join, left side:TableReader, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -2464,7 +2464,7 @@ Level Code Message Warning 1815 We can't use the HASH_JOIN_BUILD or HASH_JOIN_PROBE hint for semi join, please check the hint explain format = 'brief' SELECT /*+ hash_join_build(t2@sel_2) */ * FROM t1 WHERE EXISTS (SELECT 1 FROM t2 WHERE t2.a = t1.a); id estRows task access object operator info -MergeJoin 8000.00 root semi join, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a +MergeJoin 8000.00 root semi join, left side:TableReader, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -2638,7 +2638,7 @@ show warnings; Level Code Message explain format = 'brief' SELECT /*+ USE_TOJA(false) */ t1.a, t1.b FROM t1 WHERE t1.a in (SELECT t2.a FROM t2); id estRows task access object operator info -MergeJoin 8000.00 root semi join, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a +MergeJoin 8000.00 root semi join, left side:TableReader, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -2651,7 +2651,7 @@ show warnings; Level Code Message explain format = 'brief' SELECT /*+ USE_TOJA(false) hash_join_build(t1) */ t1.a, t1.b FROM t1 WHERE t1.a in (SELECT t2.a FROM t2); id estRows task access object operator info -MergeJoin 8000.00 root semi join, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a +MergeJoin 8000.00 root semi join, left side:TableReader, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -2665,7 +2665,7 @@ Level Code Message Warning 1815 We can't use the HASH_JOIN_BUILD or HASH_JOIN_PROBE hint for semi join, please check the hint explain format = 'brief' SELECT /*+ USE_TOJA(false) hash_join_probe(t1) */ t1.a, t1.b FROM t1 WHERE t1.a in (SELECT t2.a FROM t2); id estRows task access object operator info -MergeJoin 8000.00 root semi join, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a +MergeJoin 8000.00 root semi join, left side:TableReader, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -2679,7 +2679,7 @@ Level Code Message Warning 1815 We can't use the HASH_JOIN_BUILD or HASH_JOIN_PROBE hint for semi join, please check the hint explain format = 'brief' SELECT /*+ USE_TOJA(false) hash_join_build(t2@sel_2) */ t1.a, t1.b FROM t1 WHERE t1.a in (SELECT t2.a FROM t2); id estRows task access object operator info -MergeJoin 8000.00 root semi join, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a +MergeJoin 8000.00 root semi join, left side:TableReader, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -2693,7 +2693,7 @@ Level Code Message Warning 1815 We can't use the HASH_JOIN_BUILD or HASH_JOIN_PROBE hint for semi join, please check the hint explain format = 'brief' SELECT /*+ USE_TOJA(false) hash_join_probe(t2@sel_2) */ t1.a, t1.b FROM t1 WHERE t1.a in (SELECT t2.a FROM t2); id estRows task access object operator info -MergeJoin 8000.00 root semi join, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a +MergeJoin 8000.00 root semi join, left side:TableReader, left key:planner__core__casetest__physicalplantest__physical_plan.t1.a, right key:planner__core__casetest__physicalplantest__physical_plan.t2.a ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -2910,7 +2910,7 @@ Level Code Message Warning 1815 NO_DECORRELATE() is inapplicable because it's not in an IN subquery, an EXISTS subquery, an ANY/ALL/SOME subquery or a scalar subquery. explain format = 'brief' select exists (select /*+ semi_join_rewrite(), no_decorrelate() */ * from t1 where t1.a=t3.a) from t3; id estRows task access object operator info -HashJoin 10000.00 root left outer semi join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t3.a, planner__core__casetest__physicalplantest__physical_plan.t1.a)] +HashJoin 10000.00 root left outer semi join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t3.a, planner__core__casetest__physicalplantest__physical_plan.t1.a)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -2924,7 +2924,7 @@ Level Code Message Warning 1815 NO_DECORRELATE() and SEMI_JOIN_REWRITE() are in conflict. Both will be ineffective. explain format = 'brief' select t1.a from t1 where t1.a in (select t2.b from t2 where t2.a = t1.b); id estRows task access object operator info -HashJoin 7984.01 root semi join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.a) eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.b)] +HashJoin 7984.01 root semi join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.a) eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.b)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__physicalplantest__physical_plan.t2.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -2939,7 +2939,7 @@ Level Code Message explain format = 'brief' select t1.a from t1 where t1.a in (select /*+ no_decorrelate() */ t2.b from t2 where t2.a = t1.b); id estRows task access object operator info Projection 9990.00 root planner__core__casetest__physicalplantest__physical_plan.t1.a -└─Apply 9990.00 root semi join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.b)] +└─Apply 9990.00 root semi join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.b)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__physicalplantest__physical_plan.t1.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -2955,7 +2955,7 @@ explain format = 'brief' select t1.a from t1 where t1.a = any (select t2.b from id estRows task access object operator info Projection 8000.00 root planner__core__casetest__physicalplantest__physical_plan.t1.a └─Selection 8000.00 root Column#6 - └─HashJoin 10000.00 root left outer semi join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.a)], other cond:eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.b) + └─HashJoin 10000.00 root left outer semi join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.a)], other cond:eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.b) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -2969,7 +2969,7 @@ explain format = 'brief' select t1.a from t1 where t1.a = any (select /*+ no_dec id estRows task access object operator info Projection 8000.00 root planner__core__casetest__physicalplantest__physical_plan.t1.a └─Selection 8000.00 root Column#6 - └─Apply 10000.00 root CARTESIAN left outer semi join, other cond:eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.b) + └─Apply 10000.00 root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.b) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableRangeScan @@ -3045,7 +3045,7 @@ show warnings; Level Code Message explain format = 'brief' select t1.a, (select t2.b from t2 where t2.a = t1.b) from t1; id estRows task access object operator info -HashJoin 12500.00 root left outer join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.a)] +HashJoin 12500.00 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.a)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -3059,7 +3059,7 @@ Level Code Message explain format = 'brief' select t1.a, (select /*+ no_decorrelate() */ t2.b from t2 where t2.a = t1.b) from t1; id estRows task access object operator info Projection 10000.00 root planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.b -└─Apply 10000.00 root CARTESIAN left outer join +└─Apply 10000.00 root CARTESIAN left outer join, left side:TableReader ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─MaxOneRow(Probe) 10000.00 root @@ -3073,7 +3073,7 @@ show warnings; Level Code Message explain format = 'brief' select t1.a, t1.b not in (select t3.b from t3) from t1; id estRows task access object operator info -HashJoin 10000.00 root Null-aware anti left outer semi join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t3.b)] +HashJoin 10000.00 root Null-aware anti left outer semi join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t3.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -3086,7 +3086,7 @@ show warnings; Level Code Message explain format = 'brief' select t1.a, t1.b not in (select /*+ no_decorrelate() */ t3.b from t3) from t1; id estRows task access object operator info -HashJoin 10000.00 root Null-aware anti left outer semi join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t3.b)] +HashJoin 10000.00 root Null-aware anti left outer semi join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t3.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -3100,7 +3100,7 @@ Level Code Message Warning 1815 NO_DECORRELATE() is inapplicable because there are no correlated columns. explain format = 'brief' select exists (select t3.b from t3 where t3.a = t1.b limit 2) from t1; id estRows task access object operator info -HashJoin 10000.00 root left outer semi join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t3.a)] +HashJoin 10000.00 root left outer semi join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t3.a)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -3114,7 +3114,7 @@ Level Code Message explain format = 'brief' select exists (select /*+ no_decorrelate() */ t3.b from t3 where t3.a = t1.b limit 2) from t1; id estRows task access object operator info Projection 10000.00 root Column#10 -└─Apply 10000.00 root CARTESIAN left outer semi join +└─Apply 10000.00 root CARTESIAN left outer semi join, left side:TableReader ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─Limit(Probe) 20000.00 root offset:0, count:2 @@ -3131,7 +3131,7 @@ Level Code Message explain format = 'brief' select t1.a, (select sum(t1.a) from t2 where t2.a = 10) from t1; id estRows task access object operator info Projection 1.00 root planner__core__casetest__physicalplantest__physical_plan.t1.a, Column#6->Column#11 -└─HashJoin 1.00 root CARTESIAN left outer join +└─HashJoin 1.00 root CARTESIAN left outer join, left side:HashAgg ├─Point_Get(Build) 1.00 root table:t2 handle:10 └─HashAgg(Probe) 1.00 root funcs:sum(Column#13)->Column#6, funcs:firstrow(Column#14)->planner__core__casetest__physicalplantest__physical_plan.t1.a └─TableReader 1.00 root data:HashAgg @@ -3145,7 +3145,7 @@ Level Code Message explain format = 'brief' select t1.a, (select /*+ no_decorrelate() */ sum(t1.a) from t2 where t2.a = 10) from t1; id estRows task access object operator info Projection 1.00 root planner__core__casetest__physicalplantest__physical_plan.t1.a, Column#9->Column#11 -└─Apply 1.00 root CARTESIAN left outer join +└─Apply 1.00 root CARTESIAN left outer join, left side:HashAgg ├─HashAgg(Build) 1.00 root funcs:sum(Column#14)->Column#6, funcs:firstrow(Column#15)->planner__core__casetest__physicalplantest__physical_plan.t1.a │ └─Projection 10000.00 root cast(planner__core__casetest__physicalplantest__physical_plan.t1.a, decimal(10,0) BINARY)->Column#14, planner__core__casetest__physicalplantest__physical_plan.t1.a->Column#15 │ └─TableReader 10000.00 root data:TableFullScan @@ -3161,7 +3161,7 @@ Level Code Message explain format = 'brief' select (select count(t3.a) from t3 where t3.b = t1.b) from t1; id estRows task access object operator info Projection 10000.00 root ifnull(Column#10, 0)->Column#10 -└─HashJoin 10000.00 root left outer join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t3.b)] +└─HashJoin 10000.00 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t3.b)] ├─HashAgg(Build) 7992.00 root group by:planner__core__casetest__physicalplantest__physical_plan.t3.b, funcs:count(Column#11)->Column#10, funcs:firstrow(planner__core__casetest__physicalplantest__physical_plan.t3.b)->planner__core__casetest__physicalplantest__physical_plan.t3.b │ └─TableReader 7992.00 root data:HashAgg │ └─HashAgg 7992.00 cop[tikv] group by:planner__core__casetest__physicalplantest__physical_plan.t3.b, funcs:count(planner__core__casetest__physicalplantest__physical_plan.t3.a)->Column#11 @@ -3178,7 +3178,7 @@ Level Code Message explain format = 'brief' select (select /*+ no_decorrelate() */ count(t3.a) from t3 where t3.b = t1.b) from t1; id estRows task access object operator info Projection 10000.00 root Column#10 -└─Apply 10000.00 root CARTESIAN left outer join +└─Apply 10000.00 root CARTESIAN left outer join, left side:TableReader ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─MaxOneRow(Probe) 10000.00 root @@ -3195,7 +3195,7 @@ show warnings; Level Code Message explain format = 'brief' SELECT ta.NAME,(SELECT sum(tb.CODE) FROM tb WHERE ta.id = tb.id) tb_sum_code FROM ta WHERE ta.NAME LIKE 'chad999%'; id estRows task access object operator info -HashJoin 250.00 root left outer join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.ta.id, planner__core__casetest__physicalplantest__physical_plan.tb.id)] +HashJoin 250.00 root left outer join, left side:IndexLookUp, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.ta.id, planner__core__casetest__physicalplantest__physical_plan.tb.id)] ├─IndexLookUp(Build) 250.00 root │ ├─Selection(Build) 250.00 cop[tikv] like(planner__core__casetest__physicalplantest__physical_plan.ta.name, "chad999%", 92) │ │ └─IndexRangeScan 250.00 cop[tikv] table:ta, index:idx_ta_name(name) range:["chad999","chad99:"), keep order:false, stats:pseudo @@ -3212,7 +3212,7 @@ Level Code Message explain format = 'brief' SELECT ta.NAME,(SELECT /*+ no_decorrelate() */ sum(tb.CODE) FROM tb WHERE ta.id = tb.id) tb_sum_code FROM ta WHERE ta.NAME LIKE 'chad999%'; id estRows task access object operator info Projection 250.00 root planner__core__casetest__physicalplantest__physical_plan.ta.name, Column#13 -└─Apply 250.00 root CARTESIAN left outer join +└─Apply 250.00 root CARTESIAN left outer join, left side:IndexLookUp ├─IndexLookUp(Build) 250.00 root │ ├─Selection(Build) 250.00 cop[tikv] like(planner__core__casetest__physicalplantest__physical_plan.ta.name, "chad999%", 92) │ │ └─IndexRangeScan 250.00 cop[tikv] table:ta, index:idx_ta_name(name) range:["chad999","chad99:"), keep order:false, stats:pseudo @@ -3229,14 +3229,14 @@ show warnings; Level Code Message explain format = 'brief' SELECT ta.NAME,(SELECT sum(tb.CODE) FROM tb WHERE ta.id = tb.id and exists (select 1 from tc where tb.name=tc.name and tc.`code` like '999%')) tb_sum_code FROM ta WHERE ta.NAME LIKE 'chad999%'; id estRows task access object operator info -HashJoin 250.00 root left outer join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.ta.id, planner__core__casetest__physicalplantest__physical_plan.tb.id)] +HashJoin 250.00 root left outer join, left side:IndexLookUp, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.ta.id, planner__core__casetest__physicalplantest__physical_plan.tb.id)] ├─IndexLookUp(Build) 250.00 root │ ├─Selection(Build) 250.00 cop[tikv] like(planner__core__casetest__physicalplantest__physical_plan.ta.name, "chad999%", 92) │ │ └─IndexRangeScan 250.00 cop[tikv] table:ta, index:idx_ta_name(name) range:["chad999","chad99:"), keep order:false, stats:pseudo │ └─TableRowIDScan(Probe) 250.00 cop[tikv] table:ta keep order:false, stats:pseudo └─HashAgg(Probe) 6387.21 root group by:Column#38, funcs:sum(Column#37)->Column#18, funcs:firstrow(Column#38)->planner__core__casetest__physicalplantest__physical_plan.tb.id └─Projection 7984.01 root cast(planner__core__casetest__physicalplantest__physical_plan.tb.code, decimal(10,0) BINARY)->Column#37, planner__core__casetest__physicalplantest__physical_plan.tb.id->Column#38 - └─HashJoin 7984.01 root semi join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.tb.name, planner__core__casetest__physicalplantest__physical_plan.tc.name)] + └─HashJoin 7984.01 root semi join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.tb.name, planner__core__casetest__physicalplantest__physical_plan.tc.name)] ├─TableReader(Build) 7992.00 root data:Selection │ └─Selection 7992.00 cop[tikv] like(cast(planner__core__casetest__physicalplantest__physical_plan.tc.code, var_string(20)), "999%", 92), not(isnull(planner__core__casetest__physicalplantest__physical_plan.tc.name)) │ └─TableFullScan 10000.00 cop[tikv] table:tc keep order:false, stats:pseudo @@ -3250,7 +3250,7 @@ Level Code Message explain format = 'brief' SELECT ta.NAME,(SELECT /*+ no_decorrelate() */ sum(tb.CODE) FROM tb WHERE ta.id = tb.id and exists (select 1 from tc where tb.name=tc.name and tc.`code` like '999%')) tb_sum_code FROM ta WHERE ta.NAME LIKE 'chad999%'; id estRows task access object operator info Projection 250.00 root planner__core__casetest__physicalplantest__physical_plan.ta.name, Column#18 -└─Apply 250.00 root CARTESIAN left outer join +└─Apply 250.00 root CARTESIAN left outer join, left side:IndexLookUp ├─IndexLookUp(Build) 250.00 root │ ├─Selection(Build) 250.00 cop[tikv] like(planner__core__casetest__physicalplantest__physical_plan.ta.name, "chad999%", 92) │ │ └─IndexRangeScan 250.00 cop[tikv] table:ta, index:idx_ta_name(name) range:["chad999","chad99:"), keep order:false, stats:pseudo @@ -3258,7 +3258,7 @@ Projection 250.00 root planner__core__casetest__physicalplantest__physical_plan └─MaxOneRow(Probe) 250.00 root └─StreamAgg 250.00 root funcs:sum(Column#33)->Column#18 └─Projection 1998.00 root cast(planner__core__casetest__physicalplantest__physical_plan.tb.code, decimal(10,0) BINARY)->Column#33 - └─IndexHashJoin 1998.00 root semi join, inner:IndexLookUp, outer key:planner__core__casetest__physicalplantest__physical_plan.tb.name, inner key:planner__core__casetest__physicalplantest__physical_plan.tc.name, equal cond:eq(planner__core__casetest__physicalplantest__physical_plan.tb.name, planner__core__casetest__physicalplantest__physical_plan.tc.name) + └─IndexHashJoin 1998.00 root semi join, inner:IndexLookUp, left side:IndexLookUp, outer key:planner__core__casetest__physicalplantest__physical_plan.tb.name, inner key:planner__core__casetest__physicalplantest__physical_plan.tc.name, equal cond:eq(planner__core__casetest__physicalplantest__physical_plan.tb.name, planner__core__casetest__physicalplantest__physical_plan.tc.name) ├─IndexLookUp(Build) 2497.50 root │ ├─IndexRangeScan(Build) 2500.00 cop[tikv] table:tb, index:idx_tb_id(id) range: decided by [eq(planner__core__casetest__physicalplantest__physical_plan.ta.id, planner__core__casetest__physicalplantest__physical_plan.tb.id)], keep order:false, stats:pseudo │ └─Selection(Probe) 2497.50 cop[tikv] not(isnull(planner__core__casetest__physicalplantest__physical_plan.tb.name)) @@ -3274,14 +3274,14 @@ show warnings; Level Code Message explain format = 'brief' SELECT ta.NAME,(SELECT sum(tb.CODE) FROM tb WHERE ta.id = tb.id and exists (select /*+ no_decorrelate() */ 1 from tc where tb.name=tc.name and tc.`code` like '999%')) tb_sum_code FROM ta WHERE ta.NAME LIKE 'chad999%'; id estRows task access object operator info -HashJoin 250.00 root left outer join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.ta.id, planner__core__casetest__physicalplantest__physical_plan.tb.id)] +HashJoin 250.00 root left outer join, left side:IndexLookUp, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.ta.id, planner__core__casetest__physicalplantest__physical_plan.tb.id)] ├─IndexLookUp(Build) 250.00 root │ ├─Selection(Build) 250.00 cop[tikv] like(planner__core__casetest__physicalplantest__physical_plan.ta.name, "chad999%", 92) │ │ └─IndexRangeScan 250.00 cop[tikv] table:ta, index:idx_ta_name(name) range:["chad999","chad99:"), keep order:false, stats:pseudo │ └─TableRowIDScan(Probe) 250.00 cop[tikv] table:ta keep order:false, stats:pseudo └─HashAgg(Probe) 7992.00 root group by:Column#27, funcs:sum(Column#26)->Column#18, funcs:firstrow(Column#27)->planner__core__casetest__physicalplantest__physical_plan.tb.id └─Projection 9990.00 root cast(planner__core__casetest__physicalplantest__physical_plan.tb.code, decimal(10,0) BINARY)->Column#26, planner__core__casetest__physicalplantest__physical_plan.tb.id->Column#27 - └─Apply 9990.00 root CARTESIAN semi join + └─Apply 9990.00 root CARTESIAN semi join, left side:TableReader ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__physicalplantest__physical_plan.tb.id)) │ └─TableFullScan 10000.00 cop[tikv] table:tb keep order:false, stats:pseudo @@ -3296,7 +3296,7 @@ Level Code Message explain format = 'brief' SELECT ta.NAME,(SELECT /*+ no_decorrelate() */ sum(tb.CODE) FROM tb WHERE ta.id = tb.id and exists (select /*+ no_decorrelate() */ 1 from tc where tb.name=tc.name and tc.`code` like '999%')) tb_sum_code FROM ta WHERE ta.NAME LIKE 'chad999%'; id estRows task access object operator info Projection 250.00 root planner__core__casetest__physicalplantest__physical_plan.ta.name, Column#18 -└─Apply 250.00 root CARTESIAN left outer join +└─Apply 250.00 root CARTESIAN left outer join, left side:IndexLookUp ├─IndexLookUp(Build) 250.00 root │ ├─Selection(Build) 250.00 cop[tikv] like(planner__core__casetest__physicalplantest__physical_plan.ta.name, "chad999%", 92) │ │ └─IndexRangeScan 250.00 cop[tikv] table:ta, index:idx_ta_name(name) range:["chad999","chad99:"), keep order:false, stats:pseudo @@ -3304,7 +3304,7 @@ Projection 250.00 root planner__core__casetest__physicalplantest__physical_plan └─MaxOneRow(Probe) 250.00 root └─StreamAgg 250.00 root funcs:sum(Column#22)->Column#18 └─Projection 2500.00 root cast(planner__core__casetest__physicalplantest__physical_plan.tb.code, decimal(10,0) BINARY)->Column#22 - └─Apply 2500.00 root CARTESIAN semi join + └─Apply 2500.00 root CARTESIAN semi join, left side:IndexLookUp ├─IndexLookUp(Build) 2500.00 root │ ├─IndexRangeScan(Build) 2500.00 cop[tikv] table:tb, index:idx_tb_id(id) range: decided by [eq(planner__core__casetest__physicalplantest__physical_plan.ta.id, planner__core__casetest__physicalplantest__physical_plan.tb.id)], keep order:false, stats:pseudo │ └─TableRowIDScan(Probe) 2500.00 cop[tikv] table:tb keep order:false, stats:pseudo @@ -3372,7 +3372,7 @@ HashJoin 159.84 root inner join, equal:[eq(planner__core__casetest__physicalpla │ │ └─IndexRangeScan 250.00 cop[tikv] table:tc, index:idx_tc_name(name) range:["chad99","chad9:"), keep order:false, stats:pseudo │ └─HashAgg(Probe) 200.00 cop[tikv] group by:planner__core__casetest__physicalplantest__physical_plan.tc.name, funcs:max(planner__core__casetest__physicalplantest__physical_plan.tc.id)->Column#46 │ └─TableRowIDScan 250.00 cop[tikv] table:tc keep order:false, stats:pseudo - └─HashJoin(Probe) 7976.02 root semi join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.ta.code, planner__core__casetest__physicalplantest__physical_plan.tb.code)] + └─HashJoin(Probe) 7976.02 root semi join, left side:TableReader, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.ta.code, planner__core__casetest__physicalplantest__physical_plan.tb.code)] ├─TableReader(Build) 249.75 root data:Selection │ └─Selection 249.75 cop[tikv] like(planner__core__casetest__physicalplantest__physical_plan.tb.name, "chad9%", 92), not(isnull(planner__core__casetest__physicalplantest__physical_plan.tb.code)) │ └─TableFullScan 10000.00 cop[tikv] table:tb keep order:false, stats:pseudo @@ -3426,7 +3426,7 @@ id estRows task access object operator info Projection 10000.00 root planner__core__casetest__physicalplantest__physical_plan.ta.name └─Apply 10000.00 root CARTESIAN inner join ├─Apply(Build) 10000.00 root CARTESIAN inner join - │ ├─Apply(Build) 10000.00 root CARTESIAN semi join + │ ├─Apply(Build) 10000.00 root CARTESIAN semi join, left side:TableReader │ │ ├─TableReader(Build) 10000.00 root data:TableFullScan │ │ │ └─TableFullScan 10000.00 cop[tikv] table:ta keep order:false, stats:pseudo │ │ └─IndexLookUp(Probe) 2500.00 root diff --git a/tests/integrationtest/r/planner/core/casetest/predicate_simplification.result b/tests/integrationtest/r/planner/core/casetest/predicate_simplification.result index ae242e325f..210a76366c 100644 --- a/tests/integrationtest/r/planner/core/casetest/predicate_simplification.result +++ b/tests/integrationtest/r/planner/core/casetest/predicate_simplification.result @@ -176,7 +176,7 @@ LIMIT 240; id estRows task access object operator info Projection 41.67 root planner__core__casetest__predicate_simplification.dt.a, planner__core__casetest__predicate_simplification.dt.pk, planner__core__casetest__predicate_simplification.dt.b, planner__core__casetest__predicate_simplification.dt.c -└─IndexHashJoin 41.67 root left outer join, inner:TableReader, outer key:planner__core__casetest__predicate_simplification.it.pk, inner key:planner__core__casetest__predicate_simplification.dt.pk, equal cond:eq(planner__core__casetest__predicate_simplification.it.pk, planner__core__casetest__predicate_simplification.dt.pk), other cond:or(gt(planner__core__casetest__predicate_simplification.it.a, "a"), and(eq(planner__core__casetest__predicate_simplification.it.a, "a"), gt(planner__core__casetest__predicate_simplification.dt.pk, 1))) +└─IndexHashJoin 41.67 root left outer join, inner:TableReader, left side:Limit, outer key:planner__core__casetest__predicate_simplification.it.pk, inner key:planner__core__casetest__predicate_simplification.dt.pk, equal cond:eq(planner__core__casetest__predicate_simplification.it.pk, planner__core__casetest__predicate_simplification.dt.pk), other cond:or(gt(planner__core__casetest__predicate_simplification.it.a, "a"), and(eq(planner__core__casetest__predicate_simplification.it.a, "a"), gt(planner__core__casetest__predicate_simplification.dt.pk, 1))) ├─Limit(Build) 33.33 root offset:0, count:240 │ └─IndexReader 33.33 root index:Limit │ └─Limit 33.33 cop[tikv] offset:0, count:240 @@ -200,7 +200,7 @@ LIMIT 240; id estRows task access object operator info TopN 41.67 root planner__core__casetest__predicate_simplification.dt.pk, offset:0, count:240 -└─IndexJoin 41.67 root left outer join, inner:TableReader, outer key:planner__core__casetest__predicate_simplification.it.pk, inner key:planner__core__casetest__predicate_simplification.dt.pk, equal cond:eq(planner__core__casetest__predicate_simplification.it.pk, planner__core__casetest__predicate_simplification.dt.pk) +└─IndexJoin 41.67 root left outer join, inner:TableReader, left side:IndexReader, outer key:planner__core__casetest__predicate_simplification.it.pk, inner key:planner__core__casetest__predicate_simplification.dt.pk, equal cond:eq(planner__core__casetest__predicate_simplification.it.pk, planner__core__casetest__predicate_simplification.dt.pk) ├─IndexReader(Build) 33.33 root index:IndexRangeScan │ └─IndexRangeScan 33.33 cop[tikv] table:it, index:f(a, pk) range:("a" 1,"a" +inf], keep order:false, stats:pseudo └─TableReader(Probe) 11.11 root data:Selection diff --git a/tests/integrationtest/r/planner/core/casetest/pushdown/push_down.result b/tests/integrationtest/r/planner/core/casetest/pushdown/push_down.result index c84c78922d..75d49d4c55 100644 --- a/tests/integrationtest/r/planner/core/casetest/pushdown/push_down.result +++ b/tests/integrationtest/r/planner/core/casetest/pushdown/push_down.result @@ -190,7 +190,7 @@ HashJoin 10000.00 root inner join, equal:[eq(planner__core__casetest__pushdown_ └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo desc format = 'brief' select * from t left join (select id-2 as b from t) A on A.b=t.id; id estRows task access object operator info -HashJoin 10000.00 root left outer join, equal:[eq(planner__core__casetest__pushdown__push_down.t.id, Column#25)] +HashJoin 10000.00 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__pushdown__push_down.t.id, Column#25)] ├─Projection(Build) 8000.00 root minus(planner__core__casetest__pushdown__push_down.t.id, 2)->Column#25 │ └─TableReader 8000.00 root data:Selection │ └─Selection 8000.00 cop[tikv] not(isnull(minus(planner__core__casetest__pushdown__push_down.t.id, 2))) @@ -199,7 +199,7 @@ HashJoin 10000.00 root left outer join, equal:[eq(planner__core__casetest__push └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo desc format = 'brief' select * from t right join (select id-2 as b from t) A on A.b=t.id; id estRows task access object operator info -HashJoin 12487.50 root right outer join, equal:[eq(planner__core__casetest__pushdown__push_down.t.id, Column#25)] +HashJoin 12487.50 root right outer join, left side:TableReader, equal:[eq(planner__core__casetest__pushdown__push_down.t.id, Column#25)] ├─Projection(Build) 10000.00 root minus(planner__core__casetest__pushdown__push_down.t.id, 2)->Column#25 │ └─TableReader 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo @@ -220,7 +220,7 @@ Projection 10000.00 root Column#26, Column#13 └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo desc format = 'brief' select A.id from t as A where exists (select 1 from t where t.id=A.id); id estRows task access object operator info -HashJoin 7992.00 root semi join, equal:[eq(planner__core__casetest__pushdown__push_down.t.id, planner__core__casetest__pushdown__push_down.t.id)] +HashJoin 7992.00 root semi join, left side:TableReader, equal:[eq(planner__core__casetest__pushdown__push_down.t.id, planner__core__casetest__pushdown__push_down.t.id)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__pushdown__push_down.t.id)) │ └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo @@ -229,7 +229,7 @@ HashJoin 7992.00 root semi join, equal:[eq(planner__core__casetest__pushdown__p └─TableFullScan 10000.00 cop[tikv] table:A keep order:false, stats:pseudo desc format = 'brief' select A.id from t as A where not exists (select 1 from t where t.id=A.id); id estRows task access object operator info -HashJoin 8000.00 root anti semi join, equal:[eq(planner__core__casetest__pushdown__push_down.t.id, planner__core__casetest__pushdown__push_down.t.id)] +HashJoin 8000.00 root anti semi join, left side:TableReader, equal:[eq(planner__core__casetest__pushdown__push_down.t.id, planner__core__casetest__pushdown__push_down.t.id)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan diff --git a/tests/integrationtest/r/planner/core/casetest/rule/rule_join_reorder.result b/tests/integrationtest/r/planner/core/casetest/rule/rule_join_reorder.result index db8b866226..14c21e3683 100644 --- a/tests/integrationtest/r/planner/core/casetest/rule/rule_join_reorder.result +++ b/tests/integrationtest/r/planner/core/casetest/rule/rule_join_reorder.result @@ -560,7 +560,7 @@ IndexHashJoin 12475.01 root inner join, inner:IndexLookUp, outer key:planner__c └─TableRowIDScan 12487.50 cop[tikv] table:t2 keep order:false, stats:pseudo explain format = 'brief' select /*+ no_hash_join(t2) */ * from t1 left join t2 on t1.b=t2.b; id estRows task access object operator info -MergeJoin 12487.50 root left outer join, left key:planner__core__casetest__rule__rule_join_reorder.t1.b, right key:planner__core__casetest__rule__rule_join_reorder.t2.b +MergeJoin 12487.50 root left outer join, left side:Sort, left key:planner__core__casetest__rule__rule_join_reorder.t1.b, right key:planner__core__casetest__rule__rule_join_reorder.t2.b ├─Sort(Build) 9990.00 root planner__core__casetest__rule__rule_join_reorder.t2.b │ └─TableReader 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.b)) @@ -570,7 +570,7 @@ MergeJoin 12487.50 root left outer join, left key:planner__core__casetest__rule └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select /*+ no_hash_join(t2) */ * from t1 left join t2 on t1.a=t2.a; id estRows task access object operator info -IndexHashJoin 12487.50 root left outer join, inner:IndexLookUp, outer key:planner__core__casetest__rule__rule_join_reorder.t1.a, inner key:planner__core__casetest__rule__rule_join_reorder.t2.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a) +IndexHashJoin 12487.50 root left outer join, inner:IndexLookUp, left side:TableReader, outer key:planner__core__casetest__rule__rule_join_reorder.t1.a, inner key:planner__core__casetest__rule__rule_join_reorder.t2.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─IndexLookUp(Probe) 12487.50 root @@ -579,7 +579,7 @@ IndexHashJoin 12487.50 root left outer join, inner:IndexLookUp, outer key:plann └─TableRowIDScan(Probe) 12487.50 cop[tikv] table:t2 keep order:false, stats:pseudo explain format = 'brief' select /*+ no_hash_join(t2) */ * from t1 right join t2 on t1.b=t2.b; id estRows task access object operator info -MergeJoin 12487.50 root right outer join, left key:planner__core__casetest__rule__rule_join_reorder.t1.b, right key:planner__core__casetest__rule__rule_join_reorder.t2.b +MergeJoin 12487.50 root right outer join, left side:Sort, left key:planner__core__casetest__rule__rule_join_reorder.t1.b, right key:planner__core__casetest__rule__rule_join_reorder.t2.b ├─Sort(Build) 9990.00 root planner__core__casetest__rule__rule_join_reorder.t1.b │ └─TableReader 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.b)) @@ -589,7 +589,7 @@ MergeJoin 12487.50 root right outer join, left key:planner__core__casetest__rul └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo explain format = 'brief' select /*+ no_hash_join(t2) */ * from t1 right join t2 on t1.a=t2.a; id estRows task access object operator info -IndexHashJoin 12487.50 root right outer join, inner:IndexLookUp, outer key:planner__core__casetest__rule__rule_join_reorder.t2.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t1.a) +IndexHashJoin 12487.50 root right outer join, inner:IndexLookUp, left side:IndexLookUp, outer key:planner__core__casetest__rule__rule_join_reorder.t2.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t1.a) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─IndexLookUp(Probe) 12487.50 root @@ -671,7 +671,7 @@ HashJoin 12487.50 root inner join, equal:[eq(planner__core__casetest__rule__rul └─IndexFullScan 9990.00 cop[tikv] table:t1, index:a(a) keep order:false, stats:pseudo explain format = 'brief' select /*+ no_merge_join(t2) */ * from t1 right join t2 on t1.a=t2.a; id estRows task access object operator info -HashJoin 12487.50 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] +HashJoin 12487.50 root right outer join, left side:IndexReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─IndexReader(Build) 9990.00 root index:IndexFullScan │ └─IndexFullScan 9990.00 cop[tikv] table:t1, index:a(a) keep order:false, stats:pseudo └─IndexReader(Probe) 10000.00 root index:IndexFullScan @@ -2599,7 +2599,7 @@ Projection 43857.47 root planner__core__casetest__rule__rule_join_reorder.t4.a, │ └─TableReader 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t2, partition:p4 keep order:false, stats:pseudo - └─HashJoin(Probe) 46781.30 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] + └─HashJoin(Probe) 46781.30 root left outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] ├─PartitionUnion(Build) 39960.00 root │ ├─TableReader 9990.00 root data:Selection │ │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)) @@ -2670,7 +2670,7 @@ Projection 43857.47 root planner__core__casetest__rule__rule_join_reorder.t4.a, │ └─TableReader 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t2, partition:p4 keep order:false, stats:pseudo - └─HashJoin(Probe) 46781.30 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] + └─HashJoin(Probe) 46781.30 root left outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] ├─PartitionUnion(Build) 39960.00 root │ ├─TableReader 9990.00 root data:Selection │ │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)) @@ -2741,7 +2741,7 @@ Projection 43857.47 root planner__core__casetest__rule__rule_join_reorder.t4.a, │ └─TableReader 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t2, partition:p4 keep order:false, stats:pseudo - └─HashJoin(Probe) 46781.30 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] + └─HashJoin(Probe) 46781.30 root left outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] ├─PartitionUnion(Build) 39960.00 root │ ├─TableReader 9990.00 root data:Selection │ │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)) @@ -2812,7 +2812,7 @@ Projection 43857.47 root planner__core__casetest__rule__rule_join_reorder.t4.a, │ └─TableReader 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t2, partition:p4 keep order:false, stats:pseudo - └─HashJoin(Probe) 46781.30 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] + └─HashJoin(Probe) 46781.30 root left outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] ├─PartitionUnion(Build) 39960.00 root │ ├─TableReader 9990.00 root data:Selection │ │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)) @@ -2883,7 +2883,7 @@ Projection 43857.47 root planner__core__casetest__rule__rule_join_reorder.t4.a, │ └─TableReader 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t2, partition:p4 keep order:false, stats:pseudo - └─HashJoin(Probe) 46781.30 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] + └─HashJoin(Probe) 46781.30 root left outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] ├─PartitionUnion(Build) 39960.00 root │ ├─TableReader 9990.00 root data:Selection │ │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)) @@ -2925,7 +2925,7 @@ Level Code Message Warning 1815 leading hint is inapplicable, check if the leading hint table is valid explain format = 'brief' select /*+ leading(t3) */ * from t2 left join (t1 left join t3 on t1.a=t3.a) on t2.b=t1.b; id estRows task access object operator info -HashJoin 50000.00 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] +HashJoin 50000.00 root left outer join, left side:PartitionUnion, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] ├─PartitionUnion(Build) 50000.00 root │ ├─TableReader 10000.00 root data:TableFullScan │ │ └─TableFullScan 10000.00 cop[tikv] table:t2, partition:p0 keep order:false, stats:pseudo @@ -2937,7 +2937,7 @@ HashJoin 50000.00 root left outer join, equal:[eq(planner__core__casetest__rule │ │ └─TableFullScan 10000.00 cop[tikv] table:t2, partition:p3 keep order:false, stats:pseudo │ └─TableReader 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2, partition:p4 keep order:false, stats:pseudo -└─HashJoin(Probe) 39960.00 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] +└─HashJoin(Probe) 39960.00 root left outer join, left side:PartitionUnion, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] ├─PartitionUnion(Build) 29970.00 root │ ├─TableReader 9990.00 root data:Selection │ │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.a)) @@ -2965,7 +2965,7 @@ Level Code Message Warning 1815 leading hint is inapplicable, check if the leading hint table is valid explain format = 'brief' select /*+ leading(t2, t1, t3) */ * from t2 left join (t1 left join t3 on t1.a=t3.a) on t2.b=t1.b; id estRows task access object operator info -HashJoin 50000.00 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] +HashJoin 50000.00 root left outer join, left side:PartitionUnion, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] ├─PartitionUnion(Build) 50000.00 root │ ├─TableReader 10000.00 root data:TableFullScan │ │ └─TableFullScan 10000.00 cop[tikv] table:t2, partition:p0 keep order:false, stats:pseudo @@ -2977,7 +2977,7 @@ HashJoin 50000.00 root left outer join, equal:[eq(planner__core__casetest__rule │ │ └─TableFullScan 10000.00 cop[tikv] table:t2, partition:p3 keep order:false, stats:pseudo │ └─TableReader 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2, partition:p4 keep order:false, stats:pseudo -└─HashJoin(Probe) 39960.00 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] +└─HashJoin(Probe) 39960.00 root left outer join, left side:PartitionUnion, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] ├─PartitionUnion(Build) 29970.00 root │ ├─TableReader 9990.00 root data:Selection │ │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.a)) @@ -3006,7 +3006,7 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va Warning 1815 leading hint is inapplicable, check if the leading hint table is valid explain format = 'brief' select /*+ leading(t2, t3) */ * from t2 left join (t1 join t3 on t1.a=t3.a join t4 on t3.b = t4.b) on t2.b=t1.b; id estRows task access object operator info -HashJoin 58476.62 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] +HashJoin 58476.62 root left outer join, left side:PartitionUnion, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] ├─PartitionUnion(Build) 50000.00 root │ ├─TableReader 10000.00 root data:TableFullScan │ │ └─TableFullScan 10000.00 cop[tikv] table:t2, partition:p0 keep order:false, stats:pseudo @@ -3062,7 +3062,7 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va Warning 1815 leading hint is inapplicable, check if the leading hint table is valid explain format = 'brief' select /*+ leading(t3, t4) */ * from t2 left join (t1 join t3 on t1.a=t3.a join t4 on t3.b = t4.b) on t2.b=t1.b; id estRows task access object operator info -HashJoin 58476.62 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] +HashJoin 58476.62 root left outer join, left side:PartitionUnion, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] ├─PartitionUnion(Build) 50000.00 root │ ├─TableReader 10000.00 root data:TableFullScan │ │ └─TableFullScan 10000.00 cop[tikv] table:t2, partition:p0 keep order:false, stats:pseudo @@ -3118,7 +3118,7 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va explain format = 'brief' select /*+ leading(t3, t4) */ * from t2 left join (t1 join t3 on t1.a=t3.a join t4 on t3.b = t4.b) on t2.b=t1.b join t5 on t2.a = t5.a join t6 on t5.b=t6.b; id estRows task access object operator info Projection 54821.83 root planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b, planner__core__casetest__rule__rule_join_reorder.t5.a, planner__core__casetest__rule__rule_join_reorder.t5.b, planner__core__casetest__rule__rule_join_reorder.t6.a, planner__core__casetest__rule__rule_join_reorder.t6.b -└─HashJoin 54821.83 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] +└─HashJoin 54821.83 root left outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] ├─Projection(Build) 46781.30 root planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b │ └─HashJoin 46781.30 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t4.b)] │ ├─PartitionUnion(Build) 39960.00 root @@ -3207,7 +3207,7 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va explain format = 'brief' select /*+ leading(t3, t4) leading(t5, t6) */ * from t2 left join (t1 join t3 on t1.a=t3.a join t4 on t3.b = t4.b) on t2.b=t1.b join t5 on t2.a = t5.a join t6 on t5.b=t6.b; id estRows task access object operator info Projection 54821.83 root planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b, planner__core__casetest__rule__rule_join_reorder.t5.a, planner__core__casetest__rule__rule_join_reorder.t5.b, planner__core__casetest__rule__rule_join_reorder.t6.a, planner__core__casetest__rule__rule_join_reorder.t6.b -└─HashJoin 54821.83 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] +└─HashJoin 54821.83 root left outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] ├─Projection(Build) 46781.30 root planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b │ └─HashJoin 46781.30 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t4.b)] │ ├─PartitionUnion(Build) 39960.00 root @@ -3296,7 +3296,7 @@ Warning 1815 We can only use one leading hint at most, when multiple leading hin explain format = 'brief' select /*+ leading(t5, t6, t3, t4) */ * from t2 left join (t1 join t3 on t1.a=t3.a join t4 on t3.b = t4.b) on t2.b=t1.b join t5 on t2.a = t5.a join t6 on t5.b=t6.b; id estRows task access object operator info Projection 54821.83 root planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b, planner__core__casetest__rule__rule_join_reorder.t5.a, planner__core__casetest__rule__rule_join_reorder.t5.b, planner__core__casetest__rule__rule_join_reorder.t6.a, planner__core__casetest__rule__rule_join_reorder.t6.b -└─HashJoin 54821.83 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] +└─HashJoin 54821.83 root left outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] ├─Projection(Build) 46781.30 root planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b │ └─HashJoin 46781.30 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t4.b)] │ ├─PartitionUnion(Build) 39960.00 root @@ -3386,7 +3386,7 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va explain format = 'brief' select /*+ leading(t1, t2) */ * from t4 join t on t4.a=t.a right join t1 on t.a = t1.a join t2 on t1.b = t2.b join t3 on t2.b=t3.b; id estRows task access object operator info Projection 46828.12 root planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b, planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b -└─HashJoin 46828.12 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] +└─HashJoin 46828.12 root right outer join, left side:Projection, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] ├─Projection(Build) 37462.50 root planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b, planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t.b │ └─HashJoin 37462.50 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t4.a)] │ ├─PartitionUnion(Build) 29970.00 root @@ -3458,7 +3458,7 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va explain format = 'brief' select /*+ leading(t2, t3) */ * from t4 join t on t4.a=t.a right join t1 on t.a = t1.a join t2 on t1.b = t2.b join t3 on t2.b=t3.b; id estRows task access object operator info Projection 46828.12 root planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b, planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b -└─HashJoin 46828.12 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] +└─HashJoin 46828.12 root right outer join, left side:Projection, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] ├─Projection(Build) 37462.50 root planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b, planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t.b │ └─HashJoin 37462.50 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t4.a)] │ ├─PartitionUnion(Build) 29970.00 root @@ -3530,7 +3530,7 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va explain format = 'brief' select /*+ leading(t1, t3) */ * from t4 join t on t4.a=t.a right join t1 on t.a = t1.a join t2 on t1.b = t2.b join t3 on t2.b=t3.b; id estRows task access object operator info Projection 46828.12 root planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b, planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b -└─HashJoin 46828.12 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] +└─HashJoin 46828.12 root right outer join, left side:Projection, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] ├─Projection(Build) 37462.50 root planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b, planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t.b │ └─HashJoin 37462.50 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t4.a)] │ ├─PartitionUnion(Build) 29970.00 root @@ -3601,7 +3601,7 @@ Level Code Message Warning 1815 leading hint is inapplicable, check if the leading hint table is valid explain format = 'brief' select /*+ leading(t3) */ * from t2 right join (t1 left join t3 on t1.a=t3.a) on t2.b=t1.b; id estRows task access object operator info -HashJoin 50000.00 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] +HashJoin 50000.00 root right outer join, left side:PartitionUnion, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] ├─PartitionUnion(Build) 49950.00 root │ ├─TableReader 9990.00 root data:Selection │ │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.b)) @@ -3618,7 +3618,7 @@ HashJoin 50000.00 root right outer join, equal:[eq(planner__core__casetest__rul │ └─TableReader 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t2, partition:p4 keep order:false, stats:pseudo -└─HashJoin(Probe) 40000.00 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] +└─HashJoin(Probe) 40000.00 root left outer join, left side:PartitionUnion, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] ├─PartitionUnion(Build) 29970.00 root │ ├─TableReader 9990.00 root data:Selection │ │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.a)) @@ -3642,7 +3642,7 @@ Level Code Message Warning 1815 leading hint is inapplicable, check if the leading hint table is valid explain format = 'brief' select /*+ leading(t2, t1, t3) */ * from t2 right join (t1 left join t3 on t1.a=t3.a) on t2.b=t1.b; id estRows task access object operator info -HashJoin 50000.00 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] +HashJoin 50000.00 root right outer join, left side:PartitionUnion, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] ├─PartitionUnion(Build) 49950.00 root │ ├─TableReader 9990.00 root data:Selection │ │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.b)) @@ -3659,7 +3659,7 @@ HashJoin 50000.00 root right outer join, equal:[eq(planner__core__casetest__rul │ └─TableReader 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t2, partition:p4 keep order:false, stats:pseudo -└─HashJoin(Probe) 40000.00 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] +└─HashJoin(Probe) 40000.00 root left outer join, left side:PartitionUnion, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] ├─PartitionUnion(Build) 29970.00 root │ ├─TableReader 9990.00 root data:Selection │ │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.a)) @@ -3684,7 +3684,7 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va explain format = 'brief' select /*+ leading(t2, t3) */ * from t2 right join (t1 join t3 on t1.a=t3.a join t4 on t3.b = t4.b) on t2.b=t1.b; id estRows task access object operator info Projection 58476.62 root planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b -└─HashJoin 58476.62 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] +└─HashJoin 58476.62 root right outer join, left side:PartitionUnion, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] ├─PartitionUnion(Build) 49950.00 root │ ├─TableReader 9990.00 root data:Selection │ │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.b)) @@ -3744,7 +3744,7 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va explain format = 'brief' select /*+ leading(t3, t4) */ * from t2 right join (t1 join t3 on t1.a=t3.a join t4 on t3.b = t4.b) on t2.b=t1.b; id estRows task access object operator info Projection 58476.62 root planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b -└─HashJoin 58476.62 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] +└─HashJoin 58476.62 root right outer join, left side:PartitionUnion, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] ├─PartitionUnion(Build) 49950.00 root │ ├─TableReader 9990.00 root data:Selection │ │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.b)) @@ -4102,7 +4102,7 @@ HashJoin 1000000000000.00 root CARTESIAN inner join └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select /*+ straight_join() */ * from t1 join t2 on t1.a=t2.a left join t3 on t2.b=t3.b; id estRows task access object operator info -HashJoin 15609.38 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] +HashJoin 15609.38 root left outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo @@ -4115,7 +4115,7 @@ HashJoin 15609.38 root left outer join, equal:[eq(planner__core__casetest__rule └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select /*+ straight_join() */ * from t1 join t2 on t1.a=t2.a right join t3 on t2.b=t3.b; id estRows task access object operator info -HashJoin 15593.77 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] +HashJoin 15593.77 root right outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo └─HashJoin(Probe) 12475.01 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] @@ -4273,7 +4273,7 @@ Warning 1815 leading hint is inapplicable, check the join type or the join algor explain format = 'brief' select /*+ leading(t2) */ * from t1 join t2 on t1.a=t2.a left join t3 on t2.b=t3.b; id estRows task access object operator info Projection 15609.38 root planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b -└─HashJoin 15609.38 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] +└─HashJoin 15609.38 root left outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo @@ -4291,7 +4291,7 @@ Projection 15609.38 root planner__core__casetest__rule__rule_join_reorder.t1.a, ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo - └─HashJoin(Probe) 12487.50 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] + └─HashJoin(Probe) 12487.50 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo @@ -4305,7 +4305,7 @@ Projection 15609.38 root planner__core__casetest__rule__rule_join_reorder.t1.a, ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo - └─HashJoin(Probe) 12487.50 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] + └─HashJoin(Probe) 12487.50 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo @@ -4319,7 +4319,7 @@ Projection 15609.38 root planner__core__casetest__rule__rule_join_reorder.t1.a, ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo - └─HashJoin(Probe) 12487.50 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] + └─HashJoin(Probe) 12487.50 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo @@ -4328,7 +4328,7 @@ Projection 15609.38 root planner__core__casetest__rule__rule_join_reorder.t1.a, └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo explain format = 'brief' select /*+ leading(t3, t1) */ * from t1 join t2 on t1.a=t2.a left join t3 on t2.b=t3.b; id estRows task access object operator info -HashJoin 15609.38 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] +HashJoin 15609.38 root left outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo @@ -4343,7 +4343,7 @@ Level Code Message Warning 1815 leading hint is inapplicable, check if the leading hint table is valid explain format = 'brief' select /*+ leading(t2) */ * from t1 join t2 on t1.a=t2.a right join t3 on t2.b=t3.b; id estRows task access object operator info -HashJoin 15593.77 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] +HashJoin 15593.77 root right outer join, left side:Projection, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo └─Projection(Probe) 12475.01 root planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b @@ -4356,7 +4356,7 @@ HashJoin 15593.77 root right outer join, equal:[eq(planner__core__casetest__rul └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select /*+ leading(t3) */ * from t1 join t2 on t1.a=t2.a right join t3 on t2.b=t3.b; id estRows task access object operator info -HashJoin 15593.77 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] +HashJoin 15593.77 root right outer join, left side:Projection, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo └─Projection(Probe) 12475.01 root planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b @@ -4369,7 +4369,7 @@ HashJoin 15593.77 root right outer join, equal:[eq(planner__core__casetest__rul └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select /*+ leading(t2, t3) */ * from t1 join t2 on t1.a=t2.a right join t3 on t2.b=t3.b; id estRows task access object operator info -HashJoin 15593.77 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] +HashJoin 15593.77 root right outer join, left side:Projection, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo └─Projection(Probe) 12475.01 root planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b @@ -4385,7 +4385,7 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va Warning 1815 leading hint is inapplicable, check if the leading hint table is valid explain format = 'brief' select /*+ leading(t3, t2) */ * from t1 join t2 on t1.a=t2.a right join t3 on t2.b=t3.b; id estRows task access object operator info -HashJoin 15593.77 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] +HashJoin 15593.77 root right outer join, left side:Projection, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo └─Projection(Probe) 12475.01 root planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b @@ -4401,7 +4401,7 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va Warning 1815 leading hint is inapplicable, check if the leading hint table is valid explain format = 'brief' select /*+ leading(t3, t1) */ * from t1 join t2 on t1.a=t2.a right join t3 on t2.b=t3.b; id estRows task access object operator info -HashJoin 15593.77 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] +HashJoin 15593.77 root right outer join, left side:Projection, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo └─Projection(Probe) 12475.01 root planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b @@ -4487,7 +4487,7 @@ id estRows task access object operator info HashJoin 124875000.00 root CARTESIAN inner join ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo -└─HashJoin(Probe) 12487.50 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] +└─HashJoin(Probe) 12487.50 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -4500,7 +4500,7 @@ id estRows task access object operator info HashJoin 124875000.00 root CARTESIAN inner join ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo -└─HashJoin(Probe) 12487.50 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] +└─HashJoin(Probe) 12487.50 root right outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -4510,10 +4510,10 @@ Level Code Message Warning 1815 leading hint is inapplicable, check if the leading hint table has join conditions with other tables explain format = 'brief' select /*+ leading(t3, t1) */ * from t1 right join t2 on t1.a=t2.a right join t3 on t2.b=t3.b; id estRows task access object operator info -HashJoin 15609.38 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] +HashJoin 15609.38 root right outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo -└─HashJoin(Probe) 12487.50 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] +└─HashJoin(Probe) 12487.50 root right outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -4528,7 +4528,7 @@ id estRows task access object operator info HashJoin 124875000.00 root CARTESIAN inner join ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo -└─HashJoin(Probe) 12487.50 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] +└─HashJoin(Probe) 12487.50 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -4539,7 +4539,7 @@ id estRows task access object operator info HashJoin 124875000.00 root CARTESIAN inner join ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo -└─HashJoin(Probe) 12487.50 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] +└─HashJoin(Probe) 12487.50 root right outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -4550,7 +4550,7 @@ id estRows task access object operator info HashJoin 124875000.00 root CARTESIAN inner join ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo -└─HashJoin(Probe) 12487.50 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] +└─HashJoin(Probe) 12487.50 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -4561,7 +4561,7 @@ id estRows task access object operator info HashJoin 124875000.00 root CARTESIAN inner join ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo -└─HashJoin(Probe) 12487.50 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] +└─HashJoin(Probe) 12487.50 root right outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -4582,7 +4582,7 @@ insert into t3 values(1, 1), (2, 2), (3, 3); analyze table t3 all columns; explain format = 'brief' select /*+ straight_join() */ * from t1 join t2 on t1.a=t2.a where t1.a in (select t3.a from t3 where t1.b = t3.b); id estRows task access object operator info -HashJoin 9980.01 root semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b) eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] +HashJoin 9980.01 root semi join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b) eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] ├─TableReader(Build) 3.00 root data:Selection │ └─Selection 3.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.a)), not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b)) │ └─TableFullScan 3.00 cop[tikv] table:t3 keep order:false @@ -4595,7 +4595,7 @@ HashJoin 9980.01 root semi join, equal:[eq(planner__core__casetest__rule__rule_ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo explain format = 'brief' select /*+ straight_join() */ * from t1 join t2 on t1.a=t2.a where t1.a not in (select t3.a from t3 where t1.b = t3.b); id estRows task access object operator info -HashJoin 9990.00 root anti semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)], other cond:eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a) +HashJoin 9990.00 root anti semi join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)], other cond:eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a) ├─TableReader(Build) 3.00 root data:TableFullScan │ └─TableFullScan 3.00 cop[tikv] table:t3 keep order:false └─HashJoin(Probe) 12487.50 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] @@ -4607,7 +4607,7 @@ HashJoin 9990.00 root anti semi join, equal:[eq(planner__core__casetest__rule__ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select /*+ straight_join() */ * from t1 join t2 on t1.a=t2.a where exists (select t3.a from t3 where t1.b = t3.b); id estRows task access object operator info -HashJoin 9980.01 root semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] +HashJoin 9980.01 root semi join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] ├─TableReader(Build) 3.00 root data:Selection │ └─Selection 3.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b)) │ └─TableFullScan 3.00 cop[tikv] table:t3 keep order:false @@ -4620,7 +4620,7 @@ HashJoin 9980.01 root semi join, equal:[eq(planner__core__casetest__rule__rule_ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo explain format = 'brief' select /*+ straight_join() */ * from t1 join t2 on t1.a=t2.a where not exists (select t3.a from t3 where t1.b = t3.b); id estRows task access object operator info -HashJoin 9990.00 root anti semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] +HashJoin 9990.00 root anti semi join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] ├─TableReader(Build) 3.00 root data:TableFullScan │ └─TableFullScan 3.00 cop[tikv] table:t3 keep order:false └─HashJoin(Probe) 12487.50 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] @@ -4633,7 +4633,7 @@ HashJoin 9990.00 root anti semi join, equal:[eq(planner__core__casetest__rule__ explain format = 'brief' select /*+ straight_join() */ t1.a, (select min(t1.a) from t2 where t2.a > t1.a) from t1; id estRows task access object operator info Projection 1.00 root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#11->Column#13 -└─Apply 1.00 root CARTESIAN left outer join +└─Apply 1.00 root CARTESIAN left outer join, left side:HashAgg ├─HashAgg(Build) 1.00 root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column#7, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a │ └─IndexReader 10000.00 root index:IndexFullScan │ └─IndexFullScan 10000.00 cop[tikv] table:t1, index:a(a) keep order:false, stats:pseudo @@ -4645,7 +4645,7 @@ Projection 1.00 root planner__core__casetest__rule__rule_join_reorder.t1.a, Col explain format = 'brief' select /*+ straight_join() */ t1.a, (select min(t1.a) from t2 where t2.a > t1.a) from t1 join t3 on t1.a = t3.a; id estRows task access object operator info Projection 1.00 root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#14->Column#16 -└─Apply 1.00 root CARTESIAN left outer join +└─Apply 1.00 root CARTESIAN left outer join, left side:StreamAgg ├─StreamAgg(Build) 1.00 root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column#10, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a │ └─IndexMergeJoin 3.75 root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t3.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a │ ├─IndexReader(Build) 3.00 root index:IndexFullScan @@ -4674,7 +4674,7 @@ HashJoin 4.69 root inner join, equal:[eq(planner__core__casetest__rule__rule_jo └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select /*+ straight_join() */ * from t1 join t2 on t1.a=t2.a where t1.a not in (select t3.a from t3); id estRows task access object operator info -HashJoin 9990.00 root Null-aware anti semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] +HashJoin 9990.00 root Null-aware anti semi join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] ├─IndexReader(Build) 3.00 root index:IndexFullScan │ └─IndexFullScan 3.00 cop[tikv] table:t3, index:a(a) keep order:false └─HashJoin(Probe) 12487.50 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] @@ -4751,7 +4751,7 @@ Projection 3.75 root planner__core__casetest__rule__rule_join_reorder.t1.a, t1.a) from t1 join t3 on t1.a = t3.a; id estRows task access object operator info Projection 1.00 root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#14->Column#16 -└─Apply 1.00 root CARTESIAN left outer join +└─Apply 1.00 root CARTESIAN left outer join, left side:StreamAgg ├─StreamAgg(Build) 1.00 root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column#10, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a │ └─IndexMergeJoin 3.75 root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t3.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a │ ├─IndexReader(Build) 3.00 root index:IndexFullScan @@ -5144,7 +5144,7 @@ Projection 1.00 root planner__core__casetest__rule__rule_join_reorder.t1.a, Col explain format = 'brief' select /*+ leading(t3@sel_2) */ t1.a, (select min(t1.a) from t2 where t2.a > t1.a) from t1 join t3 on t1.a = t3.a; id estRows task access object operator info Projection 1.00 root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#14->Column#16 -└─Apply 1.00 root CARTESIAN left outer join +└─Apply 1.00 root CARTESIAN left outer join, left side:StreamAgg ├─StreamAgg(Build) 1.00 root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column#10, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a │ └─IndexMergeJoin 3.75 root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t3.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a │ ├─IndexReader(Build) 3.00 root index:IndexFullScan @@ -5162,7 +5162,7 @@ Warning 1815 There are no matching table names for (t3) in optimizer hint /*+ LE explain format = 'brief' select /*+ leading(t2, t3@sel_2) */ t1.a, (select min(t1.a) from t2 where t2.a > t1.a) from t1 join t3 on t1.a = t3.a; id estRows task access object operator info Projection 1.00 root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#14->Column#16 -└─Apply 1.00 root CARTESIAN left outer join +└─Apply 1.00 root CARTESIAN left outer join, left side:StreamAgg ├─StreamAgg(Build) 1.00 root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column#10, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a │ └─IndexMergeJoin 3.75 root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t3.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a │ ├─IndexReader(Build) 3.00 root index:IndexFullScan @@ -5180,7 +5180,7 @@ Warning 1815 There are no matching table names for (t2, t3) in optimizer hint /* explain format = 'brief' select /*+ leading(t1, t3@sel_2) */ t1.a, (select min(t1.a) from t2 where t2.a > t1.a) from t1 join t3 on t1.a = t3.a; id estRows task access object operator info Projection 1.00 root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#14->Column#16 -└─Apply 1.00 root CARTESIAN left outer join +└─Apply 1.00 root CARTESIAN left outer join, left side:StreamAgg ├─StreamAgg(Build) 1.00 root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column#10, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a │ └─IndexMergeJoin 3.75 root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t3.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a │ ├─IndexReader(Build) 3.00 root index:IndexFullScan @@ -5199,7 +5199,7 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va explain format = 'brief' select /*+ leading(t3@sel_2, t2) */ t1.a, (select min(t1.a) from t2 where t2.a > t1.a) from t1 join t3 on t1.a = t3.a; id estRows task access object operator info Projection 1.00 root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#14->Column#16 -└─Apply 1.00 root CARTESIAN left outer join +└─Apply 1.00 root CARTESIAN left outer join, left side:StreamAgg ├─StreamAgg(Build) 1.00 root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column#10, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a │ └─IndexMergeJoin 3.75 root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t3.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a │ ├─IndexReader(Build) 3.00 root index:IndexFullScan @@ -5217,7 +5217,7 @@ Warning 1815 There are no matching table names for (t3, t2) in optimizer hint /* explain format = 'brief' select /*+ leading(t3@sel_2, t1) */ t1.a, (select min(t1.a) from t2 where t2.a > t1.a) from t1 join t3 on t1.a = t3.a; id estRows task access object operator info Projection 1.00 root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#14->Column#16 -└─Apply 1.00 root CARTESIAN left outer join +└─Apply 1.00 root CARTESIAN left outer join, left side:StreamAgg ├─StreamAgg(Build) 1.00 root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column#10, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a │ └─IndexMergeJoin 3.75 root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t3.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a │ ├─IndexReader(Build) 3.00 root index:IndexFullScan @@ -5532,7 +5532,7 @@ IndexMergeJoin 4.69 root inner join, inner:Projection, outer key:planner__core_ └─TableRowIDScan(Probe) 4.69 cop[tikv] table:t2 keep order:false, stats:pseudo explain format = 'brief' select /*+ leading(t4) */ * from t1 join t2 on t1.a=t2.a join t4 on t1.b = t4.b where t1.a not in (select t3.a from t3); id estRows task access object operator info -HashJoin 12475.01 root Null-aware anti semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] +HashJoin 12475.01 root Null-aware anti semi join, left side:Projection, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] ├─IndexReader(Build) 3.00 root index:IndexFullScan │ └─IndexFullScan 3.00 cop[tikv] table:t3, index:a(a) keep order:false └─Projection(Probe) 15593.77 root planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b @@ -5549,7 +5549,7 @@ HashJoin 12475.01 root Null-aware anti semi join, equal:[eq(planner__core__case └─TableFullScan 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo explain format = 'brief' select /*+ leading(t3@sel_2) */ * from t1 join t2 on t1.a=t2.a where t1.a not in (select t3.a from t3); id estRows task access object operator info -HashJoin 9990.00 root Null-aware anti semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] +HashJoin 9990.00 root Null-aware anti semi join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] ├─IndexReader(Build) 3.00 root index:IndexFullScan │ └─IndexFullScan 3.00 cop[tikv] table:t3, index:a(a) keep order:false └─HashJoin(Probe) 12487.50 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] @@ -5563,7 +5563,7 @@ Level Code Message Warning 1815 leading hint is inapplicable, check the join type or the join algorithm hint explain format = 'brief' select /*+ leading(t2, t3@sel_2) */ * from t1 join t2 on t1.a=t2.a where t1.a not in (select t3.a from t3); id estRows task access object operator info -HashJoin 9990.00 root Null-aware anti semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] +HashJoin 9990.00 root Null-aware anti semi join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] ├─IndexReader(Build) 3.00 root index:IndexFullScan │ └─IndexFullScan 3.00 cop[tikv] table:t3, index:a(a) keep order:false └─HashJoin(Probe) 12487.50 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] @@ -5578,7 +5578,7 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va Warning 1815 leading hint is inapplicable, check the join type or the join algorithm hint explain format = 'brief' select /*+ leading(t1, t3@sel_2) */ * from t1 join t2 on t1.a=t2.a where t1.a not in (select t3.a from t3); id estRows task access object operator info -HashJoin 9990.00 root Null-aware anti semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] +HashJoin 9990.00 root Null-aware anti semi join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] ├─IndexReader(Build) 3.00 root index:IndexFullScan │ └─IndexFullScan 3.00 cop[tikv] table:t3, index:a(a) keep order:false └─HashJoin(Probe) 12487.50 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] @@ -5593,7 +5593,7 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va Warning 1815 leading hint is inapplicable, check the join type or the join algorithm hint explain format = 'brief' select /*+ leading(t3@sel_2, t2) */ * from t1 join t2 on t1.a=t2.a where t1.a not in (select t3.a from t3); id estRows task access object operator info -HashJoin 9990.00 root Null-aware anti semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] +HashJoin 9990.00 root Null-aware anti semi join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] ├─IndexReader(Build) 3.00 root index:IndexFullScan │ └─IndexFullScan 3.00 cop[tikv] table:t3, index:a(a) keep order:false └─HashJoin(Probe) 12487.50 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] @@ -5608,7 +5608,7 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va Warning 1815 leading hint is inapplicable, check the join type or the join algorithm hint explain format = 'brief' select /*+ leading(t3@sel_2, t1) */ * from t1 join t2 on t1.a=t2.a where t1.a not in (select t3.a from t3); id estRows task access object operator info -HashJoin 9990.00 root Null-aware anti semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] +HashJoin 9990.00 root Null-aware anti semi join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] ├─IndexReader(Build) 3.00 root index:IndexFullScan │ └─IndexFullScan 3.00 cop[tikv] table:t3, index:a(a) keep order:false └─HashJoin(Probe) 12487.50 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] @@ -5869,7 +5869,7 @@ Projection 24365.26 root planner__core__casetest__rule__rule_join_reorder.t4.a, ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo - └─HashJoin(Probe) 15593.77 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] + └─HashJoin(Probe) 15593.77 root left outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -5885,7 +5885,7 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va explain format = 'brief' select /*+ leading(t2, t3) */ * from t4 join t on t4.a=t.a left join t1 on t.a = t1.a join t2 on t.b = t2.b join t3 on t2.b=t3.b; id estRows task access object operator info Projection 24365.26 root planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b, planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b -└─HashJoin 24365.26 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] +└─HashJoin 24365.26 root left outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -5915,7 +5915,7 @@ Projection 24365.26 root planner__core__casetest__rule__rule_join_reorder.t4.a, ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo - └─HashJoin(Probe) 15593.77 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] + └─HashJoin(Probe) 15593.77 root left outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -5939,7 +5939,7 @@ Projection 24365.26 root planner__core__casetest__rule__rule_join_reorder.t4.a, ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo - └─HashJoin(Probe) 15593.77 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] + └─HashJoin(Probe) 15593.77 root left outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -5955,7 +5955,7 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va explain format = 'brief' select /*+ leading(t3, t2, t) */ * from t4 join t on t4.a=t.a left join t1 on t.a = t1.a join t2 on t.b = t2.b join t3 on t2.b=t3.b; id estRows task access object operator info Projection 24365.26 root planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b, planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b -└─HashJoin 24365.26 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] +└─HashJoin 24365.26 root left outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -5976,10 +5976,10 @@ Projection 24365.26 root planner__core__casetest__rule__rule_join_reorder.t4.a, └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo explain format = 'brief' select /*+ leading(t3) */ * from t2 left join (t1 left join t3 on t1.a=t3.a) on t2.b=t1.b; id estRows task access object operator info -HashJoin 15609.38 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] +HashJoin 15609.38 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo -└─HashJoin(Probe) 12487.50 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] +└─HashJoin(Probe) 12487.50 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo @@ -5988,10 +5988,10 @@ HashJoin 15609.38 root left outer join, equal:[eq(planner__core__casetest__rule └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select /*+ leading(t2, t1, t3) */ * from t2 left join (t1 left join t3 on t1.a=t3.a) on t2.b=t1.b; id estRows task access object operator info -HashJoin 15609.38 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] +HashJoin 15609.38 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo -└─HashJoin(Probe) 12487.50 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] +└─HashJoin(Probe) 12487.50 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo @@ -6003,7 +6003,7 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va Warning 1815 leading hint is inapplicable, check if the leading hint table is valid explain format = 'brief' select /*+ leading(t2, t3) */ * from t2 left join (t1 join t3 on t1.a=t3.a join t4 on t3.b = t4.b) on t2.b=t1.b; id estRows task access object operator info -HashJoin 19492.21 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] +HashJoin 19492.21 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─HashJoin(Probe) 15593.77 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t4.b)] @@ -6022,7 +6022,7 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va Warning 1815 leading hint is inapplicable, check if the leading hint table is valid explain format = 'brief' select /*+ leading(t3, t4) */ * from t2 left join (t1 join t3 on t1.a=t3.a join t4 on t3.b = t4.b) on t2.b=t1.b; id estRows task access object operator info -HashJoin 19492.21 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] +HashJoin 19492.21 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─Projection(Probe) 15593.77 root planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b @@ -6040,7 +6040,7 @@ HashJoin 19492.21 root left outer join, equal:[eq(planner__core__casetest__rule explain format = 'brief' select /*+ leading(t3, t4) */ * from t2 left join (t1 join t3 on t1.a=t3.a join t4 on t3.b = t4.b) on t2.b=t1.b join t5 on t2.a = t5.a join t6 on t5.b=t6.b; id estRows task access object operator info Projection 30426.12 root planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b, planner__core__casetest__rule__rule_join_reorder.t5.a, planner__core__casetest__rule__rule_join_reorder.t5.b, planner__core__casetest__rule__rule_join_reorder.t6.a, planner__core__casetest__rule__rule_join_reorder.t6.b -└─HashJoin 30426.12 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] +└─HashJoin 30426.12 root left outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] ├─Projection(Build) 15593.77 root planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b │ └─HashJoin 15593.77 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] │ ├─TableReader(Build) 9980.01 root data:Selection @@ -6067,7 +6067,7 @@ Projection 30426.12 root planner__core__casetest__rule__rule_join_reorder.t2.a, explain format = 'brief' select /*+ leading(t3, t4) leading(t5, t6) */ * from t2 left join (t1 join t3 on t1.a=t3.a join t4 on t3.b = t4.b) on t2.b=t1.b join t5 on t2.a = t5.a join t6 on t5.b=t6.b; id estRows task access object operator info Projection 30426.12 root planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b, planner__core__casetest__rule__rule_join_reorder.t5.a, planner__core__casetest__rule__rule_join_reorder.t5.b, planner__core__casetest__rule__rule_join_reorder.t6.a, planner__core__casetest__rule__rule_join_reorder.t6.b -└─HashJoin 30426.12 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] +└─HashJoin 30426.12 root left outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] ├─HashJoin(Build) 15593.77 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t4.b)] │ ├─TableReader(Build) 9990.00 root data:Selection │ │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t4.b)) @@ -6095,7 +6095,7 @@ Warning 1815 We can only use one leading hint at most, when multiple leading hin explain format = 'brief' select /*+ leading(t5, t6, t3, t4) */ * from t2 left join (t1 join t3 on t1.a=t3.a join t4 on t3.b = t4.b) on t2.b=t1.b join t5 on t2.a = t5.a join t6 on t5.b=t6.b; id estRows task access object operator info Projection 30426.12 root planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b, planner__core__casetest__rule__rule_join_reorder.t5.a, planner__core__casetest__rule__rule_join_reorder.t5.b, planner__core__casetest__rule__rule_join_reorder.t6.a, planner__core__casetest__rule__rule_join_reorder.t6.b -└─HashJoin 30426.12 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] +└─HashJoin 30426.12 root left outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] ├─HashJoin(Build) 15593.77 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t4.b)] │ ├─TableReader(Build) 9990.00 root data:Selection │ │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t4.b)) @@ -6123,7 +6123,7 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va Warning 1815 leading hint is inapplicable, check if the leading hint table is valid explain format = 'brief' select /*+ leading(t1, t2) */ * from t4 join t on t4.a=t.a right join t1 on t.a = t1.a join t2 on t1.b = t2.b join t3 on t2.b=t3.b; id estRows task access object operator info -HashJoin 24389.65 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] +HashJoin 24389.65 root right outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] ├─HashJoin(Build) 12487.50 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t.a)] │ ├─TableReader(Build) 9990.00 root data:Selection │ │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t.a)) @@ -6145,7 +6145,7 @@ HashJoin 24389.65 root right outer join, equal:[eq(planner__core__casetest__rul explain format = 'brief' select /*+ leading(t2, t3) */ * from t4 join t on t4.a=t.a right join t1 on t.a = t1.a join t2 on t1.b = t2.b join t3 on t2.b=t3.b; id estRows task access object operator info Projection 24389.65 root planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b, planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b -└─HashJoin 24389.65 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] +└─HashJoin 24389.65 root right outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] ├─HashJoin(Build) 12487.50 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t.a)] │ ├─TableReader(Build) 9990.00 root data:Selection │ │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t.a)) @@ -6166,7 +6166,7 @@ Projection 24389.65 root planner__core__casetest__rule__rule_join_reorder.t4.a, └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo explain format = 'brief' select /*+ leading(t1, t3) */ * from t4 join t on t4.a=t.a right join t1 on t.a = t1.a join t2 on t1.b = t2.b join t3 on t2.b=t3.b; id estRows task access object operator info -HashJoin 24389.65 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] +HashJoin 24389.65 root right outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] ├─HashJoin(Build) 12487.50 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t.a)] │ ├─TableReader(Build) 9990.00 root data:Selection │ │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t.a)) @@ -6189,11 +6189,11 @@ Level Code Message Warning 1815 leading hint is inapplicable, check if the leading hint table is valid explain format = 'brief' select /*+ leading(t3) */ * from t2 right join (t1 left join t3 on t1.a=t3.a) on t2.b=t1.b; id estRows task access object operator info -HashJoin 15593.77 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] +HashJoin 15593.77 root right outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo -└─HashJoin(Probe) 12487.50 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] +└─HashJoin(Probe) 12487.50 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo @@ -6201,11 +6201,11 @@ HashJoin 15593.77 root right outer join, equal:[eq(planner__core__casetest__rul └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select /*+ leading(t2, t1, t3) */ * from t2 right join (t1 left join t3 on t1.a=t3.a) on t2.b=t1.b; id estRows task access object operator info -HashJoin 15593.77 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] +HashJoin 15593.77 root left outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo -└─HashJoin(Probe) 12487.50 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] +└─HashJoin(Probe) 12487.50 root right outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -6218,7 +6218,7 @@ Projection 19492.21 root planner__core__casetest__rule__rule_join_reorder.t2.a, ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t4.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo - └─HashJoin(Probe) 15593.77 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] + └─HashJoin(Probe) 15593.77 root right outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -6234,7 +6234,7 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va explain format = 'brief' select /*+ leading(t3, t4) */ * from t2 right join (t1 join t3 on t1.a=t3.a join t4 on t3.b = t4.b) on t2.b=t1.b; id estRows task access object operator info Projection 19492.21 root planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b, planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t4.b -└─HashJoin 19492.21 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] +└─HashJoin 19492.21 root right outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t1.b)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -6331,7 +6331,7 @@ Projection 243165526.37 root planner__core__casetest__rule__rule_join_reorder.t └─TableFullScan 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo explain format = 'brief' select /*+ leading(t2) hash_join(t2) */ * from t left join t1 on t.a = t1.a right join t2 on t1.b = t2.b join t3 on t2.b = t3.b ; id estRows task access object operator info -HashJoin 19492.21 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.b)] +HashJoin 19492.21 root right outer join, left side:Projection, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.b)] ├─Projection(Build) 12475.01 root planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b │ └─HashJoin 12475.01 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t.a)] │ ├─TableReader(Build) 9980.01 root data:Selection @@ -6349,7 +6349,7 @@ HashJoin 19492.21 root right outer join, equal:[eq(planner__core__casetest__rul └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo explain format = 'brief' select /*+ leading(t2) hash_join(t1) */ * from t left join t1 on t.a = t1.a right join t2 on t1.b = t2.b join t3 on t2.b = t3.b ; id estRows task access object operator info -HashJoin 19492.21 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.b)] +HashJoin 19492.21 root right outer join, left side:Projection, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.b)] ├─Projection(Build) 12475.01 root planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b │ └─HashJoin 12475.01 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t.a)] │ ├─TableReader(Build) 9980.01 root data:Selection @@ -6367,7 +6367,7 @@ HashJoin 19492.21 root right outer join, equal:[eq(planner__core__casetest__rul └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo explain format = 'brief' select /*+ leading(t2) hash_join(t3) */ * from t left join t1 on t.a = t1.a right join t2 on t1.b = t2.b join t3 on t2.b = t3.b ; id estRows task access object operator info -HashJoin 19492.21 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.b)] +HashJoin 19492.21 root right outer join, left side:Projection, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.b)] ├─Projection(Build) 12475.01 root planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b │ └─HashJoin 12475.01 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t.a)] │ ├─TableReader(Build) 9980.01 root data:Selection @@ -6436,7 +6436,7 @@ HashJoin 19492.21 root inner join, equal:[eq(planner__core__casetest__rule__rul └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo explain format = 'brief' select /*+ leading(t2) INL_JOIN(t1) */ * from t left join t1 on t.a = t1.a right join t2 on t1.b = t2.b join t3 on t2.b = t3.b ; id estRows task access object operator info -HashJoin 19492.21 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.b)] +HashJoin 19492.21 root right outer join, left side:Projection, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.b)] ├─Projection(Build) 12475.01 root planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b │ └─IndexJoin 12475.01 root inner join, inner:IndexLookUp, outer key:planner__core__casetest__rule__rule_join_reorder.t.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a) │ ├─TableReader(Build) 9990.00 root data:Selection @@ -6456,7 +6456,7 @@ HashJoin 19492.21 root right outer join, equal:[eq(planner__core__casetest__rul └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo explain format = 'brief' select /*+ leading(t2) INL_JOIN(t3) */ * from t left join t1 on t.a = t1.a right join t2 on t1.b = t2.b join t3 on t2.b = t3.b ; id estRows task access object operator info -HashJoin 19492.21 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.b)] +HashJoin 19492.21 root right outer join, left side:Projection, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.b)] ├─Projection(Build) 12475.01 root planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b │ └─HashJoin 12475.01 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t.a)] │ ├─TableReader(Build) 9980.01 root data:Selection @@ -6477,7 +6477,7 @@ Warning 1815 Optimizer Hint /*+ INL_JOIN(t3) */ or /*+ TIDB_INLJ(t3) */ is inapp explain format = 'brief' select /*+ leading(t3) INL_JOIN(t1) */ * from t left join t1 on t.a = t1.a right join t2 on t1.b = t2.b join t3 on t2.b = t3.b ; id estRows task access object operator info Projection 19492.21 root planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b -└─HashJoin 19492.21 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.b)] +└─HashJoin 19492.21 root right outer join, left side:Projection, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.b)] ├─Projection(Build) 12475.01 root planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b │ └─IndexJoin 12475.01 root inner join, inner:IndexLookUp, outer key:planner__core__casetest__rule__rule_join_reorder.t.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a) │ ├─TableReader(Build) 9990.00 root data:Selection @@ -6498,7 +6498,7 @@ Projection 19492.21 root planner__core__casetest__rule__rule_join_reorder.t.a, explain format = 'brief' select /*+ leading(t3) INL_JOIN(t3) */ * from t left join t1 on t.a = t1.a right join t2 on t1.b = t2.b join t3 on t2.b = t3.b ; id estRows task access object operator info Projection 19492.21 root planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b -└─HashJoin 19492.21 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.b)] +└─HashJoin 19492.21 root right outer join, left side:Projection, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.b)] ├─Projection(Build) 12475.01 root planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b │ └─HashJoin 12475.01 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t.a)] │ ├─TableReader(Build) 9980.01 root data:Selection @@ -6518,7 +6518,7 @@ Level Code Message Warning 1815 Optimizer Hint /*+ INL_JOIN(t3) */ or /*+ TIDB_INLJ(t3) */ is inapplicable explain format = 'brief' select /*+ leading(t2) merge_join(t2) */ * from t left join t1 on t.a = t1.a right join t2 on t1.b = t2.b join t3 on t2.b = t3.b ; id estRows task access object operator info -HashJoin 19492.21 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.b)] +HashJoin 19492.21 root right outer join, left side:Projection, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.b)] ├─Projection(Build) 12475.01 root planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b │ └─HashJoin 12475.01 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t.a)] │ ├─TableReader(Build) 9980.01 root data:Selection @@ -6558,7 +6558,7 @@ Projection 19492.21 root planner__core__casetest__rule__rule_join_reorder.t.a, └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo explain format = 'brief' select /*+ leading(t2) merge_join(t3) */ * from t left join t1 on t.a = t1.a right join t2 on t1.b = t2.b join t3 on t2.b = t3.b ; id estRows task access object operator info -HashJoin 19492.21 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.b)] +HashJoin 19492.21 root right outer join, left side:Projection, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.b)] ├─Projection(Build) 12475.01 root planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b │ └─HashJoin 12475.01 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t.a)] │ ├─TableReader(Build) 9980.01 root data:Selection @@ -6599,7 +6599,7 @@ Projection 19492.21 root planner__core__casetest__rule__rule_join_reorder.t.a, explain format = 'brief' select /*+ leading(t3) merge_join(t2) */ * from t right join t1 on t.a = t1.a join t2 on t1.b = t2.b join t3 on t2.b = t3.b ; id estRows task access object operator info Projection 19511.72 root planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b -└─HashJoin 19511.72 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] +└─HashJoin 19511.72 root right outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo @@ -6619,7 +6619,7 @@ Projection 19511.72 root planner__core__casetest__rule__rule_join_reorder.t.a, explain format = 'brief' select /*+ leading(t3) merge_join(t2) */ * from t right join t1 on t.a = t1.a join t2 on t1.b = t2.b join t3 on t2.b = t3.b ; id estRows task access object operator info Projection 19511.72 root planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b -└─HashJoin 19511.72 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] +└─HashJoin 19511.72 root right outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo @@ -6639,7 +6639,7 @@ Projection 19511.72 root planner__core__casetest__rule__rule_join_reorder.t.a, explain format = 'brief' select /*+ leading(t3) merge_join(t3) */ * from t right join t1 on t.a = t1.a join t2 on t1.b = t2.b join t3 on t2.b = t3.b ; id estRows task access object operator info Projection 19511.72 root planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t.b, planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t3.b -└─HashJoin 19511.72 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] +└─HashJoin 19511.72 root right outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo @@ -6699,7 +6699,7 @@ Warning 1815 Optimizer Hint /*+ INL_JOIN(t1) */ or /*+ TIDB_INLJ(t1) */ is inapp Warning 1815 Optimizer Hint /*+ INL_JOIN(t1) */ or /*+ TIDB_INLJ(t1) */ is inapplicable explain format = 'brief' select /*+ leading(t4) */ * from t1 join t2 on t1.a=t2.a right join t4 on t1.b = t4.b where t1.a in (select t3.a from t3 where t1.b = t3.b); id estRows task access object operator info -HashJoin 12475.01 root semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b) eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] +HashJoin 12475.01 root semi join, left side:Projection, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b) eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] ├─TableReader(Build) 9980.01 root data:Selection │ └─Selection 9980.01 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.a)), not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo @@ -6717,11 +6717,11 @@ HashJoin 12475.01 root semi join, equal:[eq(planner__core__casetest__rule__rule └─TableFullScan 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo explain format = 'brief' select /*+ leading(t3@sel_2) */ * from t1 left join t2 on t1.a=t2.a where t1.a in (select t3.a from t3 where t1.b = t3.b); id estRows task access object operator info -HashJoin 9980.01 root semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b) eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] +HashJoin 9980.01 root semi join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b) eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] ├─TableReader(Build) 9980.01 root data:Selection │ └─Selection 9980.01 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.a)), not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo -└─HashJoin(Probe) 12475.01 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] +└─HashJoin(Probe) 12475.01 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─TableReader(Build) 9980.01 root data:Selection │ └─Selection 9980.01 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)), not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -6732,7 +6732,7 @@ Level Code Message Warning 1815 leading hint is inapplicable, check the join type or the join algorithm hint explain format = 'brief' select /*+ leading(t2, t3@sel_2) */ * from t1 right join t2 on t1.a=t2.a where t1.a in (select t3.a from t3 where t1.b = t3.b); id estRows task access object operator info -HashJoin 9980.01 root semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b) eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] +HashJoin 9980.01 root semi join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b) eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] ├─TableReader(Build) 9980.01 root data:Selection │ └─Selection 9980.01 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.a)), not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo @@ -6748,10 +6748,10 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va Warning 1815 leading hint is inapplicable, check the join type or the join algorithm hint explain format = 'brief' select /*+ leading(t4) */ * from t1 join t2 on t1.a=t2.a right join t4 on t1.b = t4.b where t1.a not in (select t3.a from t3 where t1.b = t3.b); id estRows task access object operator info -HashJoin 12475.01 root anti semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)], other cond:eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a) +HashJoin 12475.01 root anti semi join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)], other cond:eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo -└─HashJoin(Probe) 15593.77 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t4.b)] +└─HashJoin(Probe) 15593.77 root right outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t4.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo └─HashJoin(Probe) 12475.01 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] @@ -6763,10 +6763,10 @@ HashJoin 12475.01 root anti semi join, equal:[eq(planner__core__casetest__rule_ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo explain format = 'brief' select /*+ leading(t3@sel_2) */ * from t1 left join t2 on t1.a=t2.a where t1.a not in (select t3.a from t3 where t1.b = t3.b); id estRows task access object operator info -HashJoin 9990.00 root anti semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)], other cond:eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a) +HashJoin 9990.00 root anti semi join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)], other cond:eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo -└─HashJoin(Probe) 12487.50 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] +└─HashJoin(Probe) 12487.50 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -6776,10 +6776,10 @@ Level Code Message Warning 1815 leading hint is inapplicable, check the join type or the join algorithm hint explain format = 'brief' select /*+ leading(t2, t3@sel_2) */ * from t1 right join t2 on t1.a=t2.a where t1.a not in (select t3.a from t3 where t1.b = t3.b); id estRows task access object operator info -HashJoin 9990.00 root anti semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)], other cond:eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a) +HashJoin 9990.00 root anti semi join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)], other cond:eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo -└─HashJoin(Probe) 12487.50 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] +└─HashJoin(Probe) 12487.50 root right outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -6790,7 +6790,7 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va Warning 1815 leading hint is inapplicable, check the join type or the join algorithm hint explain format = 'brief' select /*+ leading(t4) */ * from t1 join t2 on t1.a=t2.a right join t4 on t1.b = t4.b where exists (select t3.a from t3 where t1.b = t3.b); id estRows task access object operator info -HashJoin 12475.01 root semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] +HashJoin 12475.01 root semi join, left side:Projection, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo @@ -6808,11 +6808,11 @@ HashJoin 12475.01 root semi join, equal:[eq(planner__core__casetest__rule__rule └─TableFullScan 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo explain format = 'brief' select /*+ leading(t3@sel_2) */ * from t1 left join t2 on t1.a=t2.a where exists (select t3.a from t3 where t1.b = t3.b); id estRows task access object operator info -HashJoin 9990.00 root semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] +HashJoin 9990.00 root semi join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo -└─HashJoin(Probe) 12487.50 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] +└─HashJoin(Probe) 12487.50 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -6823,7 +6823,7 @@ Level Code Message Warning 1815 leading hint is inapplicable, check the join type or the join algorithm hint explain format = 'brief' select /*+ leading(t2, t3@sel_2) */ * from t1 right join t2 on t1.a=t2.a where exists (select t3.a from t3 where t1.b = t3.b); id estRows task access object operator info -HashJoin 9980.01 root semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] +HashJoin 9980.01 root semi join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo @@ -6839,10 +6839,10 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va Warning 1815 leading hint is inapplicable, check the join type or the join algorithm hint explain format = 'brief' select /*+ leading(t4) */ * from t1 join t2 on t1.a=t2.a right join t4 on t1.b = t4.b where not exists (select t3.a from t3 where t1.b = t3.b); id estRows task access object operator info -HashJoin 12475.01 root anti semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] +HashJoin 12475.01 root anti semi join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo -└─HashJoin(Probe) 15593.77 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t4.b)] +└─HashJoin(Probe) 15593.77 root right outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t4.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo └─HashJoin(Probe) 12475.01 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] @@ -6854,10 +6854,10 @@ HashJoin 12475.01 root anti semi join, equal:[eq(planner__core__casetest__rule_ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo explain format = 'brief' select /*+ leading(t3@sel_2) */ * from t1 left join t2 on t1.a=t2.a where not exists (select t3.a from t3 where t1.b = t3.b); id estRows task access object operator info -HashJoin 9990.00 root anti semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] +HashJoin 9990.00 root anti semi join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo -└─HashJoin(Probe) 12487.50 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] +└─HashJoin(Probe) 12487.50 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -6867,10 +6867,10 @@ Level Code Message Warning 1815 leading hint is inapplicable, check the join type or the join algorithm hint explain format = 'brief' select /*+ leading(t2, t3@sel_2) */ * from t1 right join t2 on t1.a=t2.a where not exists (select t3.a from t3 where t1.b = t3.b); id estRows task access object operator info -HashJoin 9990.00 root anti semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] +HashJoin 9990.00 root anti semi join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t3.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo -└─HashJoin(Probe) 12487.50 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] +└─HashJoin(Probe) 12487.50 root right outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -6882,7 +6882,7 @@ Warning 1815 leading hint is inapplicable, check the join type or the join algor explain format = 'brief' select /*+ leading(t1) */ t1.a, (select min(t1.a) from t2 where t2.a > t1.a) from t1 join t3 on t1.a = t3.a; id estRows task access object operator info Projection 1.00 root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#14->Column#16 -└─Apply 1.00 root CARTESIAN left outer join +└─Apply 1.00 root CARTESIAN left outer join, left side:HashAgg ├─HashAgg(Build) 1.00 root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column#10, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a │ └─MergeJoin 12487.50 root inner join, left key:planner__core__casetest__rule__rule_join_reorder.t1.a, right key:planner__core__casetest__rule__rule_join_reorder.t3.a │ ├─IndexReader(Build) 9990.00 root index:IndexFullScan @@ -6897,7 +6897,7 @@ Projection 1.00 root planner__core__casetest__rule__rule_join_reorder.t1.a, Col explain format = 'brief' select /*+ leading(t3@sel_2) */ t1.a, (select min(t1.a) from t2 where t2.a > t1.a) from t1 join t3 on t1.a = t3.a; id estRows task access object operator info Projection 1.00 root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#14->Column#16 -└─Apply 1.00 root CARTESIAN left outer join +└─Apply 1.00 root CARTESIAN left outer join, left side:HashAgg ├─HashAgg(Build) 1.00 root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column#10, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a │ └─MergeJoin 12487.50 root inner join, left key:planner__core__casetest__rule__rule_join_reorder.t1.a, right key:planner__core__casetest__rule__rule_join_reorder.t3.a │ ├─IndexReader(Build) 9990.00 root index:IndexFullScan @@ -6914,7 +6914,7 @@ Warning 1815 There are no matching table names for (t3) in optimizer hint /*+ LE explain format = 'brief' select /*+ leading(t2, t3@sel_2) */ t1.a, (select min(t1.a) from t2 where t2.a > t1.a) from t1 join t3 on t1.a = t3.a; id estRows task access object operator info Projection 1.00 root planner__core__casetest__rule__rule_join_reorder.t1.a, Column#14->Column#16 -└─Apply 1.00 root CARTESIAN left outer join +└─Apply 1.00 root CARTESIAN left outer join, left side:HashAgg ├─HashAgg(Build) 1.00 root funcs:min(planner__core__casetest__rule__rule_join_reorder.t1.a)->Column#10, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t1.a)->planner__core__casetest__rule__rule_join_reorder.t1.a │ └─MergeJoin 12487.50 root inner join, left key:planner__core__casetest__rule__rule_join_reorder.t1.a, right key:planner__core__casetest__rule__rule_join_reorder.t3.a │ ├─IndexReader(Build) 9990.00 root index:IndexFullScan @@ -6985,7 +6985,7 @@ HashJoin 12487.50 root inner join, equal:[eq(planner__core__casetest__rule__rul ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t4.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo - └─HashJoin(Probe) 12475.01 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] + └─HashJoin(Probe) 12475.01 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─TableReader(Build) 9980.01 root data:Selection │ └─Selection 9980.01 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)), not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -7007,7 +7007,7 @@ HashJoin 12487.50 root inner join, equal:[eq(planner__core__casetest__rule__rul ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t4.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo - └─HashJoin(Probe) 12475.01 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] + └─HashJoin(Probe) 12475.01 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─TableReader(Build) 9980.01 root data:Selection │ └─Selection 9980.01 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)), not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -7030,7 +7030,7 @@ HashJoin 12487.50 root inner join, equal:[eq(planner__core__casetest__rule__rul ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t4.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo - └─HashJoin(Probe) 12475.01 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] + └─HashJoin(Probe) 12475.01 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─TableReader(Build) 9980.01 root data:Selection │ └─Selection 9980.01 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)), not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -7050,7 +7050,7 @@ Projection 12487.50 root planner__core__casetest__rule__rule_join_reorder.t1.a, │ └─HashAgg 7992.00 cop[tikv] group by:planner__core__casetest__rule__rule_join_reorder.t3.b, funcs:min(planner__core__casetest__rule__rule_join_reorder.t3.a)->Column#19 │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo - └─HashJoin(Probe) 15593.77 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] + └─HashJoin(Probe) 15593.77 root left outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -7074,7 +7074,7 @@ HashJoin 12487.50 root inner join, equal:[eq(planner__core__casetest__rule__rul ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t4.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo - └─HashJoin(Probe) 12475.01 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] + └─HashJoin(Probe) 12475.01 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─TableReader(Build) 9980.01 root data:Selection │ └─Selection 9980.01 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)), not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -7127,7 +7127,7 @@ Projection 15593.77 root planner__core__casetest__rule__rule_join_reorder.t1.a, └─TableFullScan 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo explain format = 'brief' select /*+ leading(t3@sel_2) */ * from t1 left join t2 on t1.a=t2.a where t1.a in (select t3.a from t3); id estRows task access object operator info -HashJoin 12487.50 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] +HashJoin 12487.50 root left outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─HashJoin(Build) 9990.00 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t3.a, planner__core__casetest__rule__rule_join_reorder.t1.a)] │ ├─StreamAgg(Build) 7992.00 root group by:planner__core__casetest__rule__rule_join_reorder.t3.a, funcs:firstrow(planner__core__casetest__rule__rule_join_reorder.t3.a)->planner__core__casetest__rule__rule_join_reorder.t3.a │ │ └─IndexReader 7992.00 root index:StreamAgg @@ -7156,13 +7156,13 @@ Projection 99800100.00 root planner__core__casetest__rule__rule_join_reorder.t1 └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo explain format = 'brief' select /*+ leading(t4) */ * from t1 left join t2 on t1.a=t2.a right join t4 on t1.b = t4.b where t1.a not in (select t3.a from t3); id estRows task access object operator info -HashJoin 12487.50 root Null-aware anti semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] +HashJoin 12487.50 root Null-aware anti semi join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] ├─IndexReader(Build) 10000.00 root index:IndexFullScan │ └─IndexFullScan 10000.00 cop[tikv] table:t3, index:a(a) keep order:false, stats:pseudo -└─HashJoin(Probe) 15609.38 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t4.b)] +└─HashJoin(Probe) 15609.38 root right outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t4.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo - └─HashJoin(Probe) 12487.50 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] + └─HashJoin(Probe) 12487.50 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -7171,10 +7171,10 @@ HashJoin 12487.50 root Null-aware anti semi join, equal:[eq(planner__core__case └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo explain format = 'brief' select /*+ leading(t3@sel_2) */ * from t1 left join t2 on t1.a=t2.a where t1.a not in (select t3.a from t3); id estRows task access object operator info -HashJoin 9990.00 root Null-aware anti semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] +HashJoin 9990.00 root Null-aware anti semi join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] ├─IndexReader(Build) 10000.00 root index:IndexFullScan │ └─IndexFullScan 10000.00 cop[tikv] table:t3, index:a(a) keep order:false, stats:pseudo -└─HashJoin(Probe) 12487.50 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] +└─HashJoin(Probe) 12487.50 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -7184,7 +7184,7 @@ Level Code Message Warning 1815 leading hint is inapplicable, check the join type or the join algorithm hint explain format = 'brief' select /*+ leading(t2, t3@sel_2) */ * from t1 join t2 on t1.a=t2.a where t1.a not in (select t3.a from t3); id estRows task access object operator info -HashJoin 9990.00 root Null-aware anti semi join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] +HashJoin 9990.00 root Null-aware anti semi join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t3.a)] ├─IndexReader(Build) 10000.00 root index:IndexFullScan │ └─IndexFullScan 10000.00 cop[tikv] table:t3, index:a(a) keep order:false, stats:pseudo └─HashJoin(Probe) 12487.50 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] @@ -7212,7 +7212,7 @@ Level Code Message Warning 1815 There are no matching table names for (t3) in optimizer hint /*+ LEADING(t2, t3) */. Maybe you can use the table alias name explain format = 'brief' select /*+ leading(t4) */ * from t1 join t2 on t1.a=t2.a right join t4 on t1.b = t4.b where not exists (select t3.a from t3); id estRows task access object operator info -HashJoin 15593.77 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t4.b)] +HashJoin 15593.77 root right outer join, left side:HashJoin, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t4.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo └─HashJoin(Probe) 12475.01 root inner join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] @@ -7224,7 +7224,7 @@ HashJoin 15593.77 root right outer join, equal:[eq(planner__core__casetest__rul └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo explain format = 'brief' select /*+ leading(t3@sel_2) */ * from t1 left join t2 on t1.a=t2.a where not exists (select t3.a from t3); id estRows task access object operator info -HashJoin 12487.50 root left outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] +HashJoin 12487.50 root left outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -7266,7 +7266,7 @@ HashJoin 15609.38 root inner join, equal:[eq(planner__core__casetest__rule__rul ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t3.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo -└─HashJoin(Probe) 12487.50 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] +└─HashJoin(Probe) 12487.50 root right outer join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t4.a, planner__core__casetest__rule__rule_join_reorder.t2.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t2.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -7277,7 +7277,7 @@ Level Code Message Warning 1815 There are no matching table names for (t4) in optimizer hint /*+ LEADING(t2, t4) */. Maybe you can use the table alias name explain format = 'brief' select /*+ leading(t3) */ * from t1 join t2 on t1.a=t2.a right join (select * from t4) t3 on t2.b=t3.b; id estRows task access object operator info -HashJoin 15593.77 root right outer join, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t4.b)] +HashJoin 15593.77 root right outer join, left side:Projection, equal:[eq(planner__core__casetest__rule__rule_join_reorder.t2.b, planner__core__casetest__rule__rule_join_reorder.t4.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo └─Projection(Probe) 12475.01 root planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t1.b, planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t2.b @@ -7318,7 +7318,7 @@ Projection 12487.50 root planner__core__casetest__rule__rule_join_reorder.t1.a, explain format = 'brief' select /*+ leading(t2@sel_2, t1) */ t1.a, (select min(t2.a) from t2) from t1 left join t3 on t1.a = t3.a; id estRows task access object operator info Projection 12487.50 root planner__core__casetest__rule__rule_join_reorder.t1.a, ->Column#14 -└─MergeJoin 12487.50 root left outer join, left key:planner__core__casetest__rule__rule_join_reorder.t1.a, right key:planner__core__casetest__rule__rule_join_reorder.t3.a +└─MergeJoin 12487.50 root left outer join, left side:IndexReader, left key:planner__core__casetest__rule__rule_join_reorder.t1.a, right key:planner__core__casetest__rule__rule_join_reorder.t3.a ├─IndexReader(Build) 9990.00 root index:IndexFullScan │ └─IndexFullScan 9990.00 cop[tikv] table:t3, index:a(a) keep order:true, stats:pseudo └─IndexReader(Probe) 10000.00 root index:IndexFullScan @@ -7329,7 +7329,7 @@ Warning 1815 leading hint is inapplicable, check if the leading hint table is va explain format = 'brief' select /*+ leading(t3, t2@sel_2) */ t1.a, (select min(t2.a) from t2) from t1 right join t3 on t1.a = t3.a; id estRows task access object operator info Projection 12487.50 root planner__core__casetest__rule__rule_join_reorder.t1.a, ->Column#14 -└─MergeJoin 12487.50 root right outer join, left key:planner__core__casetest__rule__rule_join_reorder.t1.a, right key:planner__core__casetest__rule__rule_join_reorder.t3.a +└─MergeJoin 12487.50 root right outer join, left side:IndexReader, left key:planner__core__casetest__rule__rule_join_reorder.t1.a, right key:planner__core__casetest__rule__rule_join_reorder.t3.a ├─IndexReader(Build) 9990.00 root index:IndexFullScan │ └─IndexFullScan 9990.00 cop[tikv] table:t1, index:a(a) keep order:true, stats:pseudo └─IndexReader(Probe) 10000.00 root index:IndexFullScan diff --git a/tests/integrationtest/r/planner/core/casetest/rule/rule_result_reorder.result b/tests/integrationtest/r/planner/core/casetest/rule/rule_result_reorder.result index e039de6b7b..6af06611be 100644 --- a/tests/integrationtest/r/planner/core/casetest/rule/rule_result_reorder.result +++ b/tests/integrationtest/r/planner/core/casetest/rule/rule_result_reorder.result @@ -149,7 +149,7 @@ Sort 9990.00 root planner__core__casetest__rule__rule_result_reorder.t1.a, plan explain FORMAT='brief' select * from t1 where t1.a not in (select b from t2); id estRows task access object operator info Sort 8000.00 root planner__core__casetest__rule__rule_result_reorder.t1.a, planner__core__casetest__rule__rule_result_reorder.t1.b, planner__core__casetest__rule__rule_result_reorder.t1.c, planner__core__casetest__rule__rule_result_reorder.t1.d -└─HashJoin 8000.00 root Null-aware anti semi join, equal:[eq(planner__core__casetest__rule__rule_result_reorder.t1.a, planner__core__casetest__rule__rule_result_reorder.t2.b)] +└─HashJoin 8000.00 root Null-aware anti semi join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_result_reorder.t1.a, planner__core__casetest__rule__rule_result_reorder.t2.b)] ├─IndexReader(Build) 10000.00 root index:IndexFullScan │ └─IndexFullScan 10000.00 cop[tikv] table:t2, index:b(b) keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -157,7 +157,7 @@ Sort 8000.00 root planner__core__casetest__rule__rule_result_reorder.t1.a, plan explain FORMAT='brief' select * from t1 where t1.a in (select b from t2 where t2.c>t1.c); id estRows task access object operator info Sort 7992.00 root planner__core__casetest__rule__rule_result_reorder.t1.a, planner__core__casetest__rule__rule_result_reorder.t1.b, planner__core__casetest__rule__rule_result_reorder.t1.c, planner__core__casetest__rule__rule_result_reorder.t1.d -└─HashJoin 7992.00 root semi join, equal:[eq(planner__core__casetest__rule__rule_result_reorder.t1.a, planner__core__casetest__rule__rule_result_reorder.t2.b)], other cond:gt(planner__core__casetest__rule__rule_result_reorder.t2.c, planner__core__casetest__rule__rule_result_reorder.t1.c) +└─HashJoin 7992.00 root semi join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_result_reorder.t1.a, planner__core__casetest__rule__rule_result_reorder.t2.b)], other cond:gt(planner__core__casetest__rule__rule_result_reorder.t2.c, planner__core__casetest__rule__rule_result_reorder.t1.c) ├─TableReader(Build) 9980.01 root data:Selection │ └─Selection 9980.01 cop[tikv] not(isnull(planner__core__casetest__rule__rule_result_reorder.t2.b)), not(isnull(planner__core__casetest__rule__rule_result_reorder.t2.c)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -167,7 +167,7 @@ Sort 7992.00 root planner__core__casetest__rule__rule_result_reorder.t1.a, plan explain FORMAT='brief' select * from t1 where t1.a not in (select b from t2 where t2.c>t1.c); id estRows task access object operator info Sort 8000.00 root planner__core__casetest__rule__rule_result_reorder.t1.a, planner__core__casetest__rule__rule_result_reorder.t1.b, planner__core__casetest__rule__rule_result_reorder.t1.c, planner__core__casetest__rule__rule_result_reorder.t1.d -└─HashJoin 8000.00 root Null-aware anti semi join, equal:[eq(planner__core__casetest__rule__rule_result_reorder.t1.a, planner__core__casetest__rule__rule_result_reorder.t2.b)], other cond:gt(planner__core__casetest__rule__rule_result_reorder.t2.c, planner__core__casetest__rule__rule_result_reorder.t1.c) +└─HashJoin 8000.00 root Null-aware anti semi join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_result_reorder.t1.a, planner__core__casetest__rule__rule_result_reorder.t2.b)], other cond:gt(planner__core__casetest__rule__rule_result_reorder.t2.c, planner__core__casetest__rule__rule_result_reorder.t1.c) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -175,7 +175,7 @@ Sort 8000.00 root planner__core__casetest__rule__rule_result_reorder.t1.a, plan explain FORMAT='brief' select * from t1 where exists (select 1 from t2 where t2.c>t1.c); id estRows task access object operator info Sort 7992.00 root planner__core__casetest__rule__rule_result_reorder.t1.a, planner__core__casetest__rule__rule_result_reorder.t1.b, planner__core__casetest__rule__rule_result_reorder.t1.c, planner__core__casetest__rule__rule_result_reorder.t1.d -└─HashJoin 7992.00 root CARTESIAN semi join, other cond:gt(planner__core__casetest__rule__rule_result_reorder.t2.c, planner__core__casetest__rule__rule_result_reorder.t1.c) +└─HashJoin 7992.00 root CARTESIAN semi join, left side:TableReader, other cond:gt(planner__core__casetest__rule__rule_result_reorder.t2.c, planner__core__casetest__rule__rule_result_reorder.t1.c) ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_result_reorder.t2.c)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -185,7 +185,7 @@ Sort 7992.00 root planner__core__casetest__rule__rule_result_reorder.t1.a, plan explain FORMAT='brief' select * from t1 where not exists (select 1 from t2 where t2.c>t1.c); id estRows task access object operator info Sort 8000.00 root planner__core__casetest__rule__rule_result_reorder.t1.a, planner__core__casetest__rule__rule_result_reorder.t1.b, planner__core__casetest__rule__rule_result_reorder.t1.c, planner__core__casetest__rule__rule_result_reorder.t1.d -└─HashJoin 8000.00 root CARTESIAN anti semi join, other cond:gt(planner__core__casetest__rule__rule_result_reorder.t2.c, planner__core__casetest__rule__rule_result_reorder.t1.c) +└─HashJoin 8000.00 root CARTESIAN anti semi join, left side:TableReader, other cond:gt(planner__core__casetest__rule__rule_result_reorder.t2.c, planner__core__casetest__rule__rule_result_reorder.t1.c) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -193,7 +193,7 @@ Sort 8000.00 root planner__core__casetest__rule__rule_result_reorder.t1.a, plan explain FORMAT='brief' select * from t1 where exists (select 1 from t2 where t2.c=t1.c); id estRows task access object operator info Sort 7992.00 root planner__core__casetest__rule__rule_result_reorder.t1.a, planner__core__casetest__rule__rule_result_reorder.t1.b, planner__core__casetest__rule__rule_result_reorder.t1.c, planner__core__casetest__rule__rule_result_reorder.t1.d -└─HashJoin 7992.00 root semi join, equal:[eq(planner__core__casetest__rule__rule_result_reorder.t1.c, planner__core__casetest__rule__rule_result_reorder.t2.c)] +└─HashJoin 7992.00 root semi join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_result_reorder.t1.c, planner__core__casetest__rule__rule_result_reorder.t2.c)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(planner__core__casetest__rule__rule_result_reorder.t2.c)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -203,7 +203,7 @@ Sort 7992.00 root planner__core__casetest__rule__rule_result_reorder.t1.a, plan explain FORMAT='brief' select * from t1 where not exists (select 1 from t2 where t2.c=t1.c); id estRows task access object operator info Sort 8000.00 root planner__core__casetest__rule__rule_result_reorder.t1.a, planner__core__casetest__rule__rule_result_reorder.t1.b, planner__core__casetest__rule__rule_result_reorder.t1.c, planner__core__casetest__rule__rule_result_reorder.t1.d -└─HashJoin 8000.00 root anti semi join, equal:[eq(planner__core__casetest__rule__rule_result_reorder.t1.c, planner__core__casetest__rule__rule_result_reorder.t2.c)] +└─HashJoin 8000.00 root anti semi join, left side:TableReader, equal:[eq(planner__core__casetest__rule__rule_result_reorder.t1.c, planner__core__casetest__rule__rule_result_reorder.t2.c)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -246,7 +246,7 @@ Sort 12475.01 root planner__core__casetest__rule__rule_result_reorder.t1.a, pla explain FORMAT='brief' select t1.* from t1 left outer join t2 on t1.a=t2.a; id estRows task access object operator info Sort 12500.00 root planner__core__casetest__rule__rule_result_reorder.t1.a, planner__core__casetest__rule__rule_result_reorder.t1.b, planner__core__casetest__rule__rule_result_reorder.t1.c, planner__core__casetest__rule__rule_result_reorder.t1.d -└─MergeJoin 12500.00 root left outer join, left key:planner__core__casetest__rule__rule_result_reorder.t1.a, right key:planner__core__casetest__rule__rule_result_reorder.t2.a +└─MergeJoin 12500.00 root left outer join, left side:TableReader, left key:planner__core__casetest__rule__rule_result_reorder.t1.a, right key:planner__core__casetest__rule__rule_result_reorder.t2.a ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -300,7 +300,7 @@ Sort 5333.33 root Column#9, Column#10, Column#11, Column#12 explain FORMAT='brief' select * from t1 where a > 10 intersect select * from t2 where b > 20; id estRows task access object operator info Sort 2666.67 root planner__core__casetest__rule__rule_result_reorder.t1.a, planner__core__casetest__rule__rule_result_reorder.t1.b, planner__core__casetest__rule__rule_result_reorder.t1.c, planner__core__casetest__rule__rule_result_reorder.t1.d -└─HashJoin 2666.67 root CARTESIAN semi join, other cond:nulleq(planner__core__casetest__rule__rule_result_reorder.t1.a, planner__core__casetest__rule__rule_result_reorder.t2.a), nulleq(planner__core__casetest__rule__rule_result_reorder.t1.b, planner__core__casetest__rule__rule_result_reorder.t2.b), nulleq(planner__core__casetest__rule__rule_result_reorder.t1.c, planner__core__casetest__rule__rule_result_reorder.t2.c), nulleq(planner__core__casetest__rule__rule_result_reorder.t1.d, planner__core__casetest__rule__rule_result_reorder.t2.d) +└─HashJoin 2666.67 root CARTESIAN semi join, left side:TableReader, other cond:nulleq(planner__core__casetest__rule__rule_result_reorder.t1.a, planner__core__casetest__rule__rule_result_reorder.t2.a), nulleq(planner__core__casetest__rule__rule_result_reorder.t1.b, planner__core__casetest__rule__rule_result_reorder.t2.b), nulleq(planner__core__casetest__rule__rule_result_reorder.t1.c, planner__core__casetest__rule__rule_result_reorder.t2.c), nulleq(planner__core__casetest__rule__rule_result_reorder.t1.d, planner__core__casetest__rule__rule_result_reorder.t2.d) ├─TableReader(Build) 3333.33 root data:Selection │ └─Selection 3333.33 cop[tikv] gt(planner__core__casetest__rule__rule_result_reorder.t2.b, 20) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -309,7 +309,7 @@ Sort 2666.67 root planner__core__casetest__rule__rule_result_reorder.t1.a, plan explain FORMAT='brief' select * from t1 where a > 10 except select * from t2 where b > 20; id estRows task access object operator info Sort 2666.67 root planner__core__casetest__rule__rule_result_reorder.t1.a, planner__core__casetest__rule__rule_result_reorder.t1.b, planner__core__casetest__rule__rule_result_reorder.t1.c, planner__core__casetest__rule__rule_result_reorder.t1.d -└─HashJoin 2666.67 root anti semi join, equal:[nulleq(planner__core__casetest__rule__rule_result_reorder.t1.a, planner__core__casetest__rule__rule_result_reorder.t2.a) nulleq(planner__core__casetest__rule__rule_result_reorder.t1.b, planner__core__casetest__rule__rule_result_reorder.t2.b) nulleq(planner__core__casetest__rule__rule_result_reorder.t1.c, planner__core__casetest__rule__rule_result_reorder.t2.c) nulleq(planner__core__casetest__rule__rule_result_reorder.t1.d, planner__core__casetest__rule__rule_result_reorder.t2.d)] +└─HashJoin 2666.67 root anti semi join, left side:TableReader, equal:[nulleq(planner__core__casetest__rule__rule_result_reorder.t1.a, planner__core__casetest__rule__rule_result_reorder.t2.a) nulleq(planner__core__casetest__rule__rule_result_reorder.t1.b, planner__core__casetest__rule__rule_result_reorder.t2.b) nulleq(planner__core__casetest__rule__rule_result_reorder.t1.c, planner__core__casetest__rule__rule_result_reorder.t2.c) nulleq(planner__core__casetest__rule__rule_result_reorder.t1.d, planner__core__casetest__rule__rule_result_reorder.t2.d)] ├─TableReader(Build) 3333.33 root data:Selection │ └─Selection 3333.33 cop[tikv] gt(planner__core__casetest__rule__rule_result_reorder.t2.b, 20) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo diff --git a/tests/integrationtest/r/planner/core/cbo.result b/tests/integrationtest/r/planner/core/cbo.result index 7bfdc41e35..25f344f766 100644 --- a/tests/integrationtest/r/planner/core/cbo.result +++ b/tests/integrationtest/r/planner/core/cbo.result @@ -68,10 +68,10 @@ insert into t2 values (2, 22), (3, 33), (5, 55), (233, 2), (333, 3), (3434, 5); analyze table t1, t2 all columns; explain analyze select t1.a, t1.b, sum(t1.c) from t1 join t2 on t1.a = t2.b where t1.a > 1; id estRows actRows task access object execution info operator info memory disk -Projection_9 1.00 1 root NULL time:, loops:, RU:, Concurrency:OFF planner__core__cbo.t1.a, planner__core__cbo.t1.b, Column#8 N/A -└─StreamAgg_11 1.00 1 root NULL time:, loops: funcs:sum(Column#16)->Column#8, funcs:firstrow(Column#17)->planner__core__cbo.t1.a, funcs:firstrow(Column#18)->planner__core__cbo.t1.b N/A - └─Projection_53 4.00 3 root NULL time:, loops:, Concurrency:OFF cast(planner__core__cbo.t1.c, decimal(10,0) BINARY)->Column#16, planner__core__cbo.t1.a->Column#17, planner__core__cbo.t1.b->Column#18 N/A - └─HashJoin_51 4.00 3 root NULL time:, loops:, build_hash_table:{total:, fetch:, build:}, probe:{concurrency:, total:, max:, probe:, fetch and wait:} inner join, equal:[eq(planner__core__cbo.t1.a, planner__core__cbo.t2.b)] +Projection_9 1.00 1 root NULL time:, open:, close:, loops:, RU:, Concurrency:OFF planner__core__cbo.t1.a, planner__core__cbo.t1.b, Column#8 N/A +└─StreamAgg_11 1.00 1 root NULL time:, open:, close:, loops: funcs:sum(Column#16)->Column#8, funcs:firstrow(Column#17)->planner__core__cbo.t1.a, funcs:firstrow(Column#18)->planner__core__cbo.t1.b N/A + └─Projection_53 4.00 3 root NULL time:, open:, close:, loops:, Concurrency:OFF cast(planner__core__cbo.t1.c, decimal(10,0) BINARY)->Column#16, planner__core__cbo.t1.a->Column#17, planner__core__cbo.t1.b->Column#18 N/A + └─HashJoin_51 4.00 3 root NULL time:, open:, close:, loops:, build_hash_table:{total:, fetch:, build:}, probe:{concurrency:, total:, max:, probe:, fetch and wait:} inner join, equal:[eq(planner__core__cbo.t1.a, planner__core__cbo.t2.b)] ├─TableReader_30(Build) 6.00 6 root NULL time.*loops.*cop_task.* data:Selection_29 N/A │ └─Selection_29 6.00 6 cop[tikv] NULL tikv_task:{time:, loops:} gt(planner__core__cbo.t2.b, 1), not(isnull(planner__core__cbo.t2.b)) N/A N/A │ └─TableFullScan_28 6.00 6 cop[tikv] table:t2 tikv_task:{time:, loops:} keep order:false N/A N/A diff --git a/tests/integrationtest/r/planner/core/integration.result b/tests/integrationtest/r/planner/core/integration.result index 561ac9a568..fcbea5bf36 100644 --- a/tests/integrationtest/r/planner/core/integration.result +++ b/tests/integrationtest/r/planner/core/integration.result @@ -62,7 +62,7 @@ explain format='brief' select c_custkey, count(o_orderkey) as c_count from custo id estRows task access object operator info Projection 8000.00 root planner__core__integration.customer.c_custkey, Column#7 └─HashAgg 8000.00 root group by:planner__core__integration.customer.c_custkey, funcs:count(Column#8)->Column#7, funcs:firstrow(planner__core__integration.customer.c_custkey)->planner__core__integration.customer.c_custkey - └─HashJoin 10000.00 root left outer join, equal:[eq(planner__core__integration.customer.c_custkey, planner__core__integration.orders.o_custkey)] + └─HashJoin 10000.00 root left outer join, left side:TableReader, equal:[eq(planner__core__integration.customer.c_custkey, planner__core__integration.orders.o_custkey)] ├─HashAgg(Build) 8000.00 root group by:planner__core__integration.orders.o_custkey, funcs:count(Column#9)->Column#8, funcs:firstrow(planner__core__integration.orders.o_custkey)->planner__core__integration.orders.o_custkey │ └─TableReader 8000.00 root data:HashAgg │ └─HashAgg 8000.00 cop[tikv] group by:planner__core__integration.orders.o_custkey, funcs:count(planner__core__integration.orders.o_orderkey)->Column#9 @@ -76,7 +76,7 @@ explain format='brief' select c_custkey, count(o_orderkey) as c_count from order id estRows task access object operator info Projection 8000.00 root planner__core__integration.customer.c_custkey, Column#7 └─HashAgg 8000.00 root group by:planner__core__integration.customer.c_custkey, funcs:count(Column#8)->Column#7, funcs:firstrow(planner__core__integration.customer.c_custkey)->planner__core__integration.customer.c_custkey - └─HashJoin 10000.00 root right outer join, equal:[eq(planner__core__integration.orders.o_custkey, planner__core__integration.customer.c_custkey)] + └─HashJoin 10000.00 root right outer join, left side:HashAgg, equal:[eq(planner__core__integration.orders.o_custkey, planner__core__integration.customer.c_custkey)] ├─HashAgg(Build) 8000.00 root group by:planner__core__integration.orders.o_custkey, funcs:count(Column#9)->Column#8, funcs:firstrow(planner__core__integration.orders.o_custkey)->planner__core__integration.orders.o_custkey │ └─TableReader 8000.00 root data:HashAgg │ └─HashAgg 8000.00 cop[tikv] group by:planner__core__integration.orders.o_custkey, funcs:count(planner__core__integration.orders.o_orderkey)->Column#9 @@ -2288,7 +2288,7 @@ TableDual 0.00 root rows:0 drop table t; explain select /*+ HASH_JOIN(@sel_1 t2) */ * FROM (select 1) t1 NATURAL LEFT JOIN (select 2) t2; id estRows task access object operator info -HashJoin_8 1.00 root CARTESIAN left outer join +HashJoin_8 1.00 root CARTESIAN left outer join, left side:Projection_10 ├─Projection_12(Build) 1.00 root 2->Column#2 │ └─TableDual_13 1.00 root rows:1 └─Projection_10(Probe) 1.00 root 1->Column#1 @@ -2902,7 +2902,7 @@ create table t2 (a float default null, b tinyint(4) DEFAULT NULL, key b (b)); insert into t2 values (null, 1); explain select /*+ TIDB_INLJ(t2@sel_2) */ t1.a, t1.b from t1 where t1.a not in (select t2.a from t2 where t1.b=t2.b); id estRows task access object operator info -IndexJoin_12 8000.00 root anti semi join, inner:IndexLookUp_11, outer key:planner__core__integration.t1.b, inner key:planner__core__integration.t2.b, equal cond:eq(planner__core__integration.t1.b, planner__core__integration.t2.b), other cond:eq(planner__core__integration.t1.a, planner__core__integration.t2.a) +IndexJoin_12 8000.00 root anti semi join, inner:IndexLookUp_11, left side:TableReader_22, outer key:planner__core__integration.t1.b, inner key:planner__core__integration.t2.b, equal cond:eq(planner__core__integration.t1.b, planner__core__integration.t2.b), other cond:eq(planner__core__integration.t1.a, planner__core__integration.t2.a) ├─TableReader_22(Build) 10000.00 root data:TableFullScan_21 │ └─TableFullScan_21 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─IndexLookUp_11(Probe) 12500.00 root @@ -3466,7 +3466,7 @@ INSERT INTO t2 VALUES (1,2), (2,2); explain format=brief SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.a WHERE not(0+(t1.a=30 and t2.b=1)); id estRows task access object operator info Selection 8000.00 root not(plus(0, and(eq(planner__core__integration.t1.a, 30), eq(planner__core__integration.t2.b, 1)))) -└─MergeJoin 10000.00 root left outer join, left key:planner__core__integration.t1.a, right key:planner__core__integration.t2.a +└─MergeJoin 10000.00 root left outer join, left side:TableReader, left key:planner__core__integration.t1.a, right key:planner__core__integration.t2.a ├─TableReader(Build) 8000.00 root data:Selection │ └─Selection 8000.00 cop[tikv] not(istrue_with_null(plus(0, and(eq(planner__core__integration.t2.a, 30), eq(planner__core__integration.t2.b, 1))))) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo @@ -3572,7 +3572,7 @@ create table t2(id int primary key, col1 int); explain format='brief' SELECT /*+ merge_join(t1, t2)*/ * FROM (t1 LEFT JOIN t2 ON t1.col1=t2.id) order by t2.id; id estRows task access object operator info Sort 12500.00 root planner__core__integration.t2.id -└─MergeJoin 12500.00 root left outer join, left key:planner__core__integration.t1.col1, right key:planner__core__integration.t2.id +└─MergeJoin 12500.00 root left outer join, left side:Sort, left key:planner__core__integration.t1.col1, right key:planner__core__integration.t2.id ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo └─Sort(Probe) 10000.00 root planner__core__integration.t1.col1 @@ -3588,7 +3588,7 @@ explain select one.a from t1 one order by (select two.d from t2 two where two.c id estRows task access object operator info Projection_16 10000.00 root planner__core__integration.t1.a └─Sort_17 10000.00 root planner__core__integration.t2.d - └─Apply_20 10000.00 root CARTESIAN left outer join + └─Apply_20 10000.00 root CARTESIAN left outer join, left side:TableReader_22 ├─TableReader_22(Build) 10000.00 root data:TableFullScan_21 │ └─TableFullScan_21 10000.00 cop[tikv] table:one keep order:false, stats:pseudo └─MaxOneRow_23(Probe) 10000.00 root @@ -3619,7 +3619,7 @@ a explain format = 'brief' select * from t t1 left join t t2 on t1.a=t2.a where t2.a->'$.id'='ish'; id estRows task access object operator info Selection 8000.00 root eq(json_extract(planner__core__integration.t.a, "$.id"), cast("ish", json BINARY)) -└─HashJoin 10000.00 root left outer join, equal:[eq(planner__core__integration.t.a, planner__core__integration.t.a)] +└─HashJoin 10000.00 root left outer join, left side:TableReader, equal:[eq(planner__core__integration.t.a, planner__core__integration.t.a)] ├─TableReader(Build) 8000.00 root data:Selection │ └─Selection 8000.00 cop[tikv] not(isnull(cast(planner__core__integration.t.a, var_string(4294967295)))) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -3919,19 +3919,19 @@ create table t(a int primary key, b varchar(20)); insert into t values (1,1); explain analyze select * from t where a=1; id estRows actRows task access object execution info operator info memory disk -Point_Get_1 1.00 1 root table:t time:, loops:, RU:, Get:{num_rpc:, total_time:} handle: N/A N/A +Point_Get_1 1.00 1 root table:t time:, open:, close:, loops:, RU:, Get:{num_rpc:, total_time:} handle: N/A N/A explain analyze select * from t where a in (1,2,3); id estRows actRows task access object execution info operator info memory disk -Batch_Point_Get_1 3.00 1 root table:t time:, loops:, RU:, BatchGet:{num_rpc:, total_time:} handle:[1 2 3], keep order:false, desc:false N/A N/A +Batch_Point_Get_1 3.00 1 root table:t time:, open:, close:, loops:, RU:, BatchGet:{num_rpc:, total_time:} handle:[1 2 3], keep order:false, desc:false N/A N/A drop table if exists t; create table t (a int, b int, unique index (a)); insert into t values (1,1); explain analyze select * from t where a=1; id estRows actRows task access object execution info operator info memory disk -Point_Get_1 1.00 1 root table:t, index:a(a) time:, loops:, RU:, Get:{num_rpc:, total_time:} NULL N/A N/A +Point_Get_1 1.00 1 root table:t, index:a(a) time:, open:, close:, loops:, RU:, Get:{num_rpc:, total_time:} NULL N/A N/A explain analyze insert ignore into t values (1,1),(2,2),(3,3),(4,4); id estRows actRows task access object execution info operator info memory disk -Insert_1 N/A 0 root NULL time:, loops:, prepare:, check_insert: {total_time:, mem_insert_time:, prefetch:, fk_check:, rpc:{BatchGet:{num_rpc:, total_time:}}}, RU: N/A Bytes N/A +Insert_1 N/A 0 root NULL time:, open:, close:, loops:, prepare:, check_insert: {total_time:, mem_insert_time:, prefetch:, fk_check:, rpc:{BatchGet:{num_rpc:, total_time:}}}, RU: N/A Bytes N/A drop table if exists t; create table t (a int, b int); insert into t values (1, 2); diff --git a/tests/integrationtest/r/planner/core/rule_constant_propagation.result b/tests/integrationtest/r/planner/core/rule_constant_propagation.result index 4769224785..b5b4c8a08a 100644 --- a/tests/integrationtest/r/planner/core/rule_constant_propagation.result +++ b/tests/integrationtest/r/planner/core/rule_constant_propagation.result @@ -73,7 +73,7 @@ HashJoin_11 4166.67 root inner join, equal:[eq(planner__core__rule_constant_pro └─TableFullScan_13 10000.00 cop[tikv] table:t keep order:false, stats:pseudo explain select * from (select * from t where t.id>1) tmp left join s on tmp.id=s.id; -- left join, only left child can be optimized; id estRows task access object operator info -HashJoin_10 4166.67 root left outer join, equal:[eq(planner__core__rule_constant_propagation.t.id, planner__core__rule_constant_propagation.s.id)] +HashJoin_10 4166.67 root left outer join, left side:TableReader_14, equal:[eq(planner__core__rule_constant_propagation.t.id, planner__core__rule_constant_propagation.s.id)] ├─TableReader_17(Build) 3333.33 root data:Selection_16 │ └─Selection_16 3333.33 cop[tikv] gt(planner__core__rule_constant_propagation.s.id, 1), not(isnull(planner__core__rule_constant_propagation.s.id)) │ └─TableFullScan_15 10000.00 cop[tikv] table:s keep order:false, stats:pseudo @@ -82,7 +82,7 @@ HashJoin_10 4166.67 root left outer join, equal:[eq(planner__core__rule_constan └─TableFullScan_12 10000.00 cop[tikv] table:t keep order:false, stats:pseudo explain select * from t left join (select * from s where s.id>1) tmp on t.id=tmp.id; -- can't, left join; id estRows task access object operator info -HashJoin_9 10000.00 root left outer join, equal:[eq(planner__core__rule_constant_propagation.t.id, planner__core__rule_constant_propagation.s.id)] +HashJoin_9 10000.00 root left outer join, left side:TableReader_12, equal:[eq(planner__core__rule_constant_propagation.t.id, planner__core__rule_constant_propagation.s.id)] ├─TableReader_15(Build) 3333.33 root data:Selection_14 │ └─Selection_14 3333.33 cop[tikv] gt(planner__core__rule_constant_propagation.s.id, 1), not(isnull(planner__core__rule_constant_propagation.s.id)) │ └─TableFullScan_13 10000.00 cop[tikv] table:s keep order:false, stats:pseudo @@ -90,7 +90,7 @@ HashJoin_9 10000.00 root left outer join, equal:[eq(planner__core__rule_constan └─TableFullScan_11 10000.00 cop[tikv] table:t keep order:false, stats:pseudo explain select * from t right join (select * from s where s.id>1) tmp on t.id=tmp.id; -- right join, only right child can be optimized; id estRows task access object operator info -HashJoin_10 4166.67 root right outer join, equal:[eq(planner__core__rule_constant_propagation.t.id, planner__core__rule_constant_propagation.s.id)] +HashJoin_10 4166.67 root right outer join, left side:TableReader_14, equal:[eq(planner__core__rule_constant_propagation.t.id, planner__core__rule_constant_propagation.s.id)] ├─TableReader_17(Build) 3333.33 root data:Selection_16 │ └─Selection_16 3333.33 cop[tikv] gt(planner__core__rule_constant_propagation.s.id, 1) │ └─TableFullScan_15 10000.00 cop[tikv] table:s keep order:false, stats:pseudo @@ -99,7 +99,7 @@ HashJoin_10 4166.67 root right outer join, equal:[eq(planner__core__rule_consta └─TableFullScan_12 10000.00 cop[tikv] table:t keep order:false, stats:pseudo explain select * from (select * from t where t.id>1) tmp right join s on tmp.id=s.id; -- can't, right join; id estRows task access object operator info -HashJoin_10 10000.00 root right outer join, equal:[eq(planner__core__rule_constant_propagation.t.id, planner__core__rule_constant_propagation.s.id)] +HashJoin_10 10000.00 root right outer join, left side:TableReader_13, equal:[eq(planner__core__rule_constant_propagation.t.id, planner__core__rule_constant_propagation.s.id)] ├─TableReader_13(Build) 3333.33 root data:Selection_12 │ └─Selection_12 3333.33 cop[tikv] gt(planner__core__rule_constant_propagation.t.id, 1), not(isnull(planner__core__rule_constant_propagation.t.id)) │ └─TableFullScan_11 10000.00 cop[tikv] table:t keep order:false, stats:pseudo @@ -172,7 +172,7 @@ HashAgg_24 5325.33 root group by:Column#14, Column#15, funcs:firstrow(Column#14 │ └─Selection_30 3333.33 cop[tikv] gt(planner__core__rule_constant_propagation.t.id, 1), not(isnull(planner__core__rule_constant_propagation.t.id)) │ └─TableFullScan_29 10000.00 cop[tikv] table:t keep order:false, stats:pseudo └─Projection_35 4154.17 root cast(planner__core__rule_constant_propagation.t.id, bigint BINARY)->Column#14, planner__core__rule_constant_propagation.t.name->Column#15 - └─HashJoin_36 4154.17 root left outer join, equal:[eq(planner__core__rule_constant_propagation.t.id, planner__core__rule_constant_propagation.s.id)] + └─HashJoin_36 4154.17 root left outer join, left side:TableReader_40, equal:[eq(planner__core__rule_constant_propagation.t.id, planner__core__rule_constant_propagation.s.id)] ├─TableReader_43(Build) 3323.33 root data:Selection_42 │ └─Selection_42 3323.33 cop[tikv] lt(planner__core__rule_constant_propagation.s.id, 3), not(isnull(planner__core__rule_constant_propagation.s.id)) │ └─TableFullScan_41 10000.00 cop[tikv] table:s keep order:false, stats:pseudo diff --git a/tests/integrationtest/r/planner/core/rule_join_reorder.result b/tests/integrationtest/r/planner/core/rule_join_reorder.result index 3e4fa745ac..ebf1ab24af 100644 --- a/tests/integrationtest/r/planner/core/rule_join_reorder.result +++ b/tests/integrationtest/r/planner/core/rule_join_reorder.result @@ -37,7 +37,7 @@ id estRows task access object operator info Sort 2.50 root planner__core__rule_join_reorder.queries_identifier.id └─Projection 2.50 root planner__core__rule_join_reorder.queries_identifier.id, planner__core__rule_join_reorder.queries_identifier.name └─Selection 2.50 root or(and(eq(planner__core__rule_join_reorder.queries_channel.id, 5), eq(planner__core__rule_join_reorder.queries_program.id, 9)), eq(planner__core__rule_join_reorder.queries_program.id, 8)) - └─IndexJoin 3.12 root left outer join, inner:IndexReader, outer key:planner__core__rule_join_reorder.queries_identifier.id, inner key:planner__core__rule_join_reorder.queries_channel.identifier_id, equal cond:eq(planner__core__rule_join_reorder.queries_identifier.id, planner__core__rule_join_reorder.queries_channel.identifier_id) + └─IndexJoin 3.12 root left outer join, inner:IndexReader, left side:IndexHashJoin, outer key:planner__core__rule_join_reorder.queries_identifier.id, inner key:planner__core__rule_join_reorder.queries_channel.identifier_id, equal cond:eq(planner__core__rule_join_reorder.queries_identifier.id, planner__core__rule_join_reorder.queries_channel.identifier_id) ├─IndexHashJoin(Build) 2.50 root inner join, inner:TableReader, outer key:planner__core__rule_join_reorder.queries_program.identifier_id, inner key:planner__core__rule_join_reorder.queries_identifier.id, equal cond:eq(planner__core__rule_join_reorder.queries_program.identifier_id, planner__core__rule_join_reorder.queries_identifier.id) │ ├─Batch_Point_Get(Build) 2.00 root table:queries_program handle:[8 9], keep order:false, desc:false │ └─TableReader(Probe) 2.00 root data:TableRangeScan @@ -48,10 +48,10 @@ explain format='brief' select * from t left join t1 on t.a=t1.a inner join t2 on id estRows task access object operator info Projection 19.51 root planner__core__rule_join_reorder.t.a, planner__core__rule_join_reorder.t1.a, planner__core__rule_join_reorder.t1.b, planner__core__rule_join_reorder.t2.a, planner__core__rule_join_reorder.t2.b, planner__core__rule_join_reorder.t2.c, planner__core__rule_join_reorder.t3.a, planner__core__rule_join_reorder.t3.b, planner__core__rule_join_reorder.t4.a, planner__core__rule_join_reorder.t4.b └─Selection 19.51 root or(gt(planner__core__rule_join_reorder.t2.b, 100), or(gt(planner__core__rule_join_reorder.t.a, 10), lt(planner__core__rule_join_reorder.t1.b, 10))), or(gt(planner__core__rule_join_reorder.t2.b, 100), or(gt(planner__core__rule_join_reorder.t2.a, 10), lt(planner__core__rule_join_reorder.t1.b, 10))) - └─HashJoin 24.39 root left outer join, equal:[eq(planner__core__rule_join_reorder.t2.a, planner__core__rule_join_reorder.t4.a)] - ├─HashJoin(Build) 19.51 root left outer join, equal:[eq(planner__core__rule_join_reorder.t.a, planner__core__rule_join_reorder.t1.a)] + └─HashJoin 24.39 root left outer join, left side:HashJoin, equal:[eq(planner__core__rule_join_reorder.t2.a, planner__core__rule_join_reorder.t4.a)] + ├─HashJoin(Build) 19.51 root left outer join, left side:HashJoin, equal:[eq(planner__core__rule_join_reorder.t.a, planner__core__rule_join_reorder.t1.a)] │ ├─HashJoin(Build) 15.61 root inner join, equal:[eq(planner__core__rule_join_reorder.t2.a, planner__core__rule_join_reorder.t.a)] - │ │ ├─HashJoin(Build) 12.49 root left outer join, equal:[eq(planner__core__rule_join_reorder.t2.a, planner__core__rule_join_reorder.t3.a)] + │ │ ├─HashJoin(Build) 12.49 root left outer join, left side:TableReader, equal:[eq(planner__core__rule_join_reorder.t2.a, planner__core__rule_join_reorder.t3.a)] │ │ │ ├─TableReader(Build) 9.99 root data:Selection │ │ │ │ └─Selection 9.99 cop[tikv] eq(planner__core__rule_join_reorder.t2.c, 100), not(isnull(planner__core__rule_join_reorder.t2.a)) │ │ │ │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -112,7 +112,7 @@ AND tt.offer_pbu_id = o.offer_pbu_id AND tt.te_partition = o.partition_no; id estRows task access object operator info Projection 155781.72 root planner__core__rule_join_reorder.t3.market_id, planner__core__rule_join_reorder.t3.offer_pbu_id -└─HashJoin 155781.72 root right outer join, equal:[eq(planner__core__rule_join_reorder.t3.market_id, planner__core__rule_join_reorder.t3.market_id) eq(planner__core__rule_join_reorder.t3.offer_pbu_id, planner__core__rule_join_reorder.t3.offer_pbu_id) eq(planner__core__rule_join_reorder.t3.te_partition, planner__core__rule_join_reorder.t1.part)] +└─HashJoin 155781.72 root right outer join, left side:IndexReader, equal:[eq(planner__core__rule_join_reorder.t3.market_id, planner__core__rule_join_reorder.t3.market_id) eq(planner__core__rule_join_reorder.t3.offer_pbu_id, planner__core__rule_join_reorder.t3.offer_pbu_id) eq(planner__core__rule_join_reorder.t3.te_partition, planner__core__rule_join_reorder.t1.part)] ├─IndexReader(Build) 9970.03 root index:Selection │ └─Selection 9970.03 cop[tikv] not(isnull(planner__core__rule_join_reorder.t3.market_id)), not(isnull(planner__core__rule_join_reorder.t3.te_partition)) │ └─IndexFullScan 9990.00 cop[tikv] table:tt, index:t_pbu_partition_id(offer_pbu_id, market_id, te_partition) keep order:false, stats:pseudo diff --git a/tests/integrationtest/r/select.result b/tests/integrationtest/r/select.result index 1ad0adbb02..6912f6a7e3 100644 --- a/tests/integrationtest/r/select.result +++ b/tests/integrationtest/r/select.result @@ -330,14 +330,14 @@ drop table if exists t; create table t (id int primary key, a int, b int); explain format = 'brief' select * from (t t1 left join t t2 on t1.a = t2.a) left join (t t3 left join t t4 on t3.a = t4.a) on t2.b = 1; id estRows task access object operator info -HashJoin 155937656.25 root CARTESIAN left outer join, left cond:[eq(select.t.b, 1)] -├─HashJoin(Build) 12487.50 root left outer join, equal:[eq(select.t.a, select.t.a)] +HashJoin 155937656.25 root CARTESIAN left outer join, left side:HashJoin, left cond:[eq(select.t.b, 1)] +├─HashJoin(Build) 12487.50 root left outer join, left side:TableReader, equal:[eq(select.t.a, select.t.a)] │ ├─TableReader(Build) 9990.00 root data:Selection │ │ └─Selection 9990.00 cop[tikv] not(isnull(select.t.a)) │ │ └─TableFullScan 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo │ └─TableReader(Probe) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:false, stats:pseudo -└─HashJoin(Probe) 12487.50 root left outer join, equal:[eq(select.t.a, select.t.a)] +└─HashJoin(Probe) 12487.50 root left outer join, left side:TableReader, equal:[eq(select.t.a, select.t.a)] ├─TableReader(Build) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(select.t.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -425,7 +425,7 @@ drop table if exists s; create table s(a varchar(20), b varchar(20)); explain format = 'brief' select a in (select a from s where s.b = t.b) from t; id estRows task access object operator info -HashJoin 10000.00 root left outer semi join, equal:[eq(Column#11, Column#12)], other cond:eq(cast(select.t.a, double BINARY), cast(select.s.a, double BINARY)) +HashJoin 10000.00 root left outer semi join, left side:Projection, equal:[eq(Column#11, Column#12)], other cond:eq(cast(select.t.a, double BINARY), cast(select.s.a, double BINARY)) ├─Projection(Build) 10000.00 root select.s.a, cast(select.s.b, double BINARY)->Column#12 │ └─TableReader 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:s keep order:false, stats:pseudo @@ -434,7 +434,7 @@ HashJoin 10000.00 root left outer semi join, equal:[eq(Column#11, Column#12)], └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo explain format = 'brief' select a in (select a+b from t t2 where t2.b = t1.b) from t t1; id estRows task access object operator info -HashJoin 10000.00 root left outer semi join, equal:[eq(select.t.b, select.t.b)], other cond:eq(select.t.a, plus(select.t.a, select.t.b)) +HashJoin 10000.00 root left outer semi join, left side:TableReader, equal:[eq(select.t.b, select.t.b)], other cond:eq(select.t.a, plus(select.t.a, select.t.b)) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -443,7 +443,7 @@ drop table t; create table t(a int not null, b int); explain format = 'brief' select a in (select a from t t2 where t2.b = t1.b) from t t1; id estRows task access object operator info -HashJoin 10000.00 root left outer semi join, equal:[eq(select.t.b, select.t.b) eq(select.t.a, select.t.a)] +HashJoin 10000.00 root left outer semi join, left side:TableReader, equal:[eq(select.t.b, select.t.b) eq(select.t.a, select.t.a)] ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -479,7 +479,7 @@ drop table if exists t2; create table t2(a int, b int); explain format = 'brief' select * from t1 where t1.a in (select t2.a as a from t2 where t2.b > t1.b order by t1.b); id estRows task access object operator info -HashJoin 7984.01 root semi join, equal:[eq(select.t1.a, select.t2.a)], other cond:gt(select.t2.b, select.t1.b) +HashJoin 7984.01 root semi join, left side:TableReader, equal:[eq(select.t1.a, select.t2.a)], other cond:gt(select.t2.b, select.t1.b) ├─TableReader(Build) 9980.01 root data:Selection │ └─Selection 9980.01 cop[tikv] not(isnull(select.t2.a)), not(isnull(select.t2.b)) │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo @@ -531,11 +531,11 @@ analyze table t1,t2,t3 all columns; explain format = 'brief' select * from t2 left join t1 on t2.a=t1.a left join t3 on t2.a=t3.a; id estRows task access object operator info Projection 4.00 root select.t2.a, select.t2.b, select.t1.a, select.t1.b, select.t3.a, select.t3.b -└─HashJoin 4.00 root left outer join, equal:[eq(select.t2.a, select.t1.a)] +└─HashJoin 4.00 root left outer join, left side:HashJoin, equal:[eq(select.t2.a, select.t1.a)] ├─TableReader(Build) 4.00 root data:Selection │ └─Selection 4.00 cop[tikv] not(isnull(select.t1.a)) │ └─TableFullScan 4.00 cop[tikv] table:t1 keep order:false - └─HashJoin(Probe) 3.00 root left outer join, equal:[eq(select.t2.a, select.t3.a)] + └─HashJoin(Probe) 3.00 root left outer join, left side:TableReader, equal:[eq(select.t2.a, select.t3.a)] ├─TableReader(Build) 2.00 root data:Selection │ └─Selection 2.00 cop[tikv] not(isnull(select.t3.a)) │ └─TableFullScan 2.00 cop[tikv] table:t3 keep order:false @@ -543,8 +543,8 @@ Projection 4.00 root select.t2.a, select.t2.b, select.t1.a, select.t1.b, select └─TableFullScan 3.00 cop[tikv] table:t2 keep order:false explain format = 'brief' select * from t2 left join (t1 left join t3 on t1.a=t3.a) on t2.a=1; id estRows task access object operator info -HashJoin 12.00 root CARTESIAN left outer join, left cond:[eq(select.t2.a, 1)] -├─HashJoin(Build) 4.00 root left outer join, equal:[eq(select.t1.a, select.t3.a)] +HashJoin 12.00 root CARTESIAN left outer join, left side:TableReader, left cond:[eq(select.t2.a, 1)] +├─HashJoin(Build) 4.00 root left outer join, left side:TableReader, equal:[eq(select.t1.a, select.t3.a)] │ ├─TableReader(Build) 2.00 root data:Selection │ │ └─Selection 2.00 cop[tikv] not(isnull(select.t3.a)) │ │ └─TableFullScan 2.00 cop[tikv] table:t3 keep order:false @@ -554,7 +554,7 @@ HashJoin 12.00 root CARTESIAN left outer join, left cond:[eq(select.t2.a, 1)] └─TableFullScan 3.00 cop[tikv] table:t2 keep order:false explain format = 'brief' select * from t2 left join (t1 left join t3 on t1.a=t3.a) on t2.a=t3.a; id estRows task access object operator info -HashJoin 4.00 root left outer join, equal:[eq(select.t2.a, select.t3.a)] +HashJoin 4.00 root left outer join, left side:TableReader, equal:[eq(select.t2.a, select.t3.a)] ├─Projection(Build) 4.00 root select.t1.a, select.t1.b, select.t3.a, select.t3.b │ └─HashJoin 4.00 root inner join, equal:[eq(select.t3.a, select.t1.a)] │ ├─TableReader(Build) 2.00 root data:Selection @@ -568,7 +568,7 @@ HashJoin 4.00 root left outer join, equal:[eq(select.t2.a, select.t3.a)] explain format = 'brief' select * from t2 left join t1 on t1.a=t2.a join t3 on t2.b=t3.b; id estRows task access object operator info Projection 4.00 root select.t2.a, select.t2.b, select.t1.a, select.t1.b, select.t3.a, select.t3.b -└─HashJoin 4.00 root left outer join, equal:[eq(select.t2.a, select.t1.a)] +└─HashJoin 4.00 root left outer join, left side:HashJoin, equal:[eq(select.t2.a, select.t1.a)] ├─HashJoin(Build) 2.00 root inner join, equal:[eq(select.t3.b, select.t2.b)] │ ├─TableReader(Build) 2.00 root data:Selection │ │ └─Selection 2.00 cop[tikv] not(isnull(select.t3.b)) @@ -582,7 +582,7 @@ Projection 4.00 root select.t2.a, select.t2.b, select.t1.a, select.t1.b, select explain format = 'brief' select * from t1 right join t2 on t1.a=t2.a join t3 on t2.b=t3.b; id estRows task access object operator info Projection 4.00 root select.t1.a, select.t1.b, select.t2.a, select.t2.b, select.t3.a, select.t3.b -└─HashJoin 4.00 root right outer join, equal:[eq(select.t1.a, select.t2.a)] +└─HashJoin 4.00 root right outer join, left side:TableReader, equal:[eq(select.t1.a, select.t2.a)] ├─HashJoin(Build) 2.00 root inner join, equal:[eq(select.t3.b, select.t2.b)] │ ├─TableReader(Build) 2.00 root data:Selection │ │ └─Selection 2.00 cop[tikv] not(isnull(select.t3.b)) @@ -595,7 +595,7 @@ Projection 4.00 root select.t1.a, select.t1.b, select.t2.a, select.t2.b, select └─TableFullScan 4.00 cop[tikv] table:t1 keep order:false explain format = 'brief' select * from t2 right join t3 on t3.a=t2.a right join t1 on t2.a=t1.a; id estRows task access object operator info -HashJoin 4.00 root right outer join, equal:[eq(select.t2.a, select.t1.a)] +HashJoin 4.00 root right outer join, left side:Projection, equal:[eq(select.t2.a, select.t1.a)] ├─Projection(Build) 2.00 root select.t2.a, select.t2.b, select.t3.a, select.t3.b │ └─HashJoin 2.00 root inner join, equal:[eq(select.t3.a, select.t2.a)] │ ├─TableReader(Build) 2.00 root data:Selection @@ -608,7 +608,7 @@ HashJoin 4.00 root right outer join, equal:[eq(select.t2.a, select.t1.a)] └─TableFullScan 4.00 cop[tikv] table:t1 keep order:false explain format = 'brief' select * from (t1 left join t2 on t1.a=t2.a) left join (t3 left join t4 on t3.a=t4.a) on t2.a=t4.a; id estRows task access object operator info -HashJoin 4.00 root left outer join, equal:[eq(select.t2.a, select.t4.a)] +HashJoin 4.00 root left outer join, left side:HashJoin, equal:[eq(select.t2.a, select.t4.a)] ├─HashJoin(Build) 2.50 root inner join, equal:[eq(select.t3.a, select.t4.a)] │ ├─TableReader(Build) 2.00 root data:Selection │ │ └─Selection 2.00 cop[tikv] not(isnull(select.t3.a)) @@ -616,7 +616,7 @@ HashJoin 4.00 root left outer join, equal:[eq(select.t2.a, select.t4.a)] │ └─TableReader(Probe) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(select.t4.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo -└─HashJoin(Probe) 4.00 root left outer join, equal:[eq(select.t1.a, select.t2.a)] +└─HashJoin(Probe) 4.00 root left outer join, left side:TableReader, equal:[eq(select.t1.a, select.t2.a)] ├─TableReader(Build) 3.00 root data:Selection │ └─Selection 3.00 cop[tikv] not(isnull(select.t2.a)) │ └─TableFullScan 3.00 cop[tikv] table:t2 keep order:false @@ -624,15 +624,15 @@ HashJoin 4.00 root left outer join, equal:[eq(select.t2.a, select.t4.a)] └─TableFullScan 4.00 cop[tikv] table:t1 keep order:false explain format = 'brief' select * from (t1 left join t2 on t1.a=t2.a) left join (t3 left join t4 on t3.a=t4.a) on t2.a=t3.a; id estRows task access object operator info -HashJoin 4.00 root left outer join, equal:[eq(select.t2.a, select.t3.a)] -├─HashJoin(Build) 2.50 root left outer join, equal:[eq(select.t3.a, select.t4.a)] +HashJoin 4.00 root left outer join, left side:HashJoin, equal:[eq(select.t2.a, select.t3.a)] +├─HashJoin(Build) 2.50 root left outer join, left side:TableReader, equal:[eq(select.t3.a, select.t4.a)] │ ├─TableReader(Build) 2.00 root data:Selection │ │ └─Selection 2.00 cop[tikv] not(isnull(select.t3.a)) │ │ └─TableFullScan 2.00 cop[tikv] table:t3 keep order:false │ └─TableReader(Probe) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(select.t4.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo -└─HashJoin(Probe) 4.00 root left outer join, equal:[eq(select.t1.a, select.t2.a)] +└─HashJoin(Probe) 4.00 root left outer join, left side:TableReader, equal:[eq(select.t1.a, select.t2.a)] ├─TableReader(Build) 3.00 root data:Selection │ └─Selection 3.00 cop[tikv] not(isnull(select.t2.a)) │ └─TableFullScan 3.00 cop[tikv] table:t2 keep order:false @@ -640,7 +640,7 @@ HashJoin 4.00 root left outer join, equal:[eq(select.t2.a, select.t3.a)] └─TableFullScan 4.00 cop[tikv] table:t1 keep order:false explain format = 'brief' select * from (t1 left join t2 on t1.a=t2.a) left join (t3 left join t4 on t3.a=t4.a) on t1.a=t4.a; id estRows task access object operator info -HashJoin 4.00 root left outer join, equal:[eq(select.t1.a, select.t4.a)] +HashJoin 4.00 root left outer join, left side:HashJoin, equal:[eq(select.t1.a, select.t4.a)] ├─HashJoin(Build) 2.50 root inner join, equal:[eq(select.t3.a, select.t4.a)] │ ├─TableReader(Build) 2.00 root data:Selection │ │ └─Selection 2.00 cop[tikv] not(isnull(select.t3.a)) @@ -648,7 +648,7 @@ HashJoin 4.00 root left outer join, equal:[eq(select.t1.a, select.t4.a)] │ └─TableReader(Probe) 9990.00 root data:Selection │ └─Selection 9990.00 cop[tikv] not(isnull(select.t4.a)) │ └─TableFullScan 10000.00 cop[tikv] table:t4 keep order:false, stats:pseudo -└─HashJoin(Probe) 4.00 root left outer join, equal:[eq(select.t1.a, select.t2.a)] +└─HashJoin(Probe) 4.00 root left outer join, left side:TableReader, equal:[eq(select.t1.a, select.t2.a)] ├─TableReader(Build) 3.00 root data:Selection │ └─Selection 3.00 cop[tikv] not(isnull(select.t2.a)) │ └─TableFullScan 3.00 cop[tikv] table:t2 keep order:false diff --git a/tests/integrationtest/r/statistics/integration.result b/tests/integrationtest/r/statistics/integration.result index 4baea6abde..7c7e0e56f4 100644 --- a/tests/integrationtest/r/statistics/integration.result +++ b/tests/integrationtest/r/statistics/integration.result @@ -16,7 +16,7 @@ analyze table t2 all columns; explain format = 'brief' select * from t1 left join t2 on t1.a=t2.a order by t1.a, t2.a; id estRows task access object operator info Sort 4.00 root statistics__integration.t1.a, statistics__integration.t2.a -└─HashJoin 4.00 root left outer join, equal:[eq(statistics__integration.t1.a, statistics__integration.t2.a)] +└─HashJoin 4.00 root left outer join, left side:TableReader, equal:[eq(statistics__integration.t1.a, statistics__integration.t2.a)] ├─TableReader(Build) 1.00 root data:Selection │ └─Selection 1.00 cop[tikv] not(isnull(statistics__integration.t2.a)) │ └─TableFullScan 2.00 cop[tikv] table:t2 keep order:false @@ -25,7 +25,7 @@ Sort 4.00 root statistics__integration.t1.a, statistics__integration.t2.a explain format = 'brief' select * from t2 left join t1 on t1.a=t2.a order by t1.a, t2.a; id estRows task access object operator info Sort 2.00 root statistics__integration.t1.a, statistics__integration.t2.a -└─HashJoin 2.00 root left outer join, equal:[eq(statistics__integration.t2.a, statistics__integration.t1.a)] +└─HashJoin 2.00 root left outer join, left side:TableReader, equal:[eq(statistics__integration.t2.a, statistics__integration.t1.a)] ├─TableReader(Build) 1.00 root data:Selection │ └─Selection 1.00 cop[tikv] not(isnull(statistics__integration.t1.a)) │ └─TableFullScan 4.00 cop[tikv] table:t1 keep order:false @@ -34,7 +34,7 @@ Sort 2.00 root statistics__integration.t1.a, statistics__integration.t2.a explain format = 'brief' select * from t1 right join t2 on t1.a=t2.a order by t1.a, t2.a; id estRows task access object operator info Sort 2.00 root statistics__integration.t1.a, statistics__integration.t2.a -└─HashJoin 2.00 root right outer join, equal:[eq(statistics__integration.t1.a, statistics__integration.t2.a)] +└─HashJoin 2.00 root right outer join, left side:TableReader, equal:[eq(statistics__integration.t1.a, statistics__integration.t2.a)] ├─TableReader(Build) 1.00 root data:Selection │ └─Selection 1.00 cop[tikv] not(isnull(statistics__integration.t1.a)) │ └─TableFullScan 4.00 cop[tikv] table:t1 keep order:false @@ -43,7 +43,7 @@ Sort 2.00 root statistics__integration.t1.a, statistics__integration.t2.a explain format = 'brief' select * from t2 right join t1 on t1.a=t2.a order by t1.a, t2.a; id estRows task access object operator info Sort 4.00 root statistics__integration.t1.a, statistics__integration.t2.a -└─HashJoin 4.00 root right outer join, equal:[eq(statistics__integration.t2.a, statistics__integration.t1.a)] +└─HashJoin 4.00 root right outer join, left side:TableReader, equal:[eq(statistics__integration.t2.a, statistics__integration.t1.a)] ├─TableReader(Build) 1.00 root data:Selection │ └─Selection 1.00 cop[tikv] not(isnull(statistics__integration.t2.a)) │ └─TableFullScan 2.00 cop[tikv] table:t2 keep order:false diff --git a/tests/integrationtest/r/subquery.result b/tests/integrationtest/r/subquery.result index cbef81238b..91bc89089d 100644 --- a/tests/integrationtest/r/subquery.result +++ b/tests/integrationtest/r/subquery.result @@ -7,7 +7,7 @@ set session tidb_hashagg_partial_concurrency = 1; set session tidb_hashagg_final_concurrency = 1; explain format = 'brief' select * from t1 where t1.a in (select t1.b + t2.b from t2); id estRows task access object operator info -HashJoin 8000.00 root CARTESIAN semi join, other cond:eq(subquery.t1.a, plus(subquery.t1.b, subquery.t2.b)) +HashJoin 8000.00 root CARTESIAN semi join, left side:TableReader, other cond:eq(subquery.t1.a, plus(subquery.t1.b, subquery.t2.b)) ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -19,7 +19,7 @@ analyze table t; explain format = 'brief' select t.c in (select count(*) from t s use index(idx), t t1 where s.b = 1 and s.c = 1 and s.d = t.a and s.a = t1.a) from t; id estRows task access object operator info Projection 5.00 root Column#22 -└─Apply 5.00 root CARTESIAN left outer semi join, other cond:eq(subquery.t.c, Column#21) +└─Apply 5.00 root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(subquery.t.c, Column#21) ├─TableReader(Build) 5.00 root data:TableFullScan │ └─TableFullScan 5.00 cop[tikv] table:t keep order:false └─StreamAgg(Probe) 5.00 root funcs:count(1)->Column#21 @@ -56,7 +56,7 @@ insert into exam values(1, 'math', 100); set names utf8 collate utf8_general_ci; explain format = 'brief' select * from stu where stu.name not in (select 'guo' from exam where exam.stu_id = stu.id); id estRows task access object operator info -HashJoin 8000.00 root anti semi join, equal:[eq(subquery.stu.id, subquery.exam.stu_id)], other cond:eq(subquery.stu.name, "guo") +HashJoin 8000.00 root anti semi join, left side:TableReader, equal:[eq(subquery.stu.id, subquery.exam.stu_id)], other cond:eq(subquery.stu.name, "guo") ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:exam keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan @@ -66,7 +66,7 @@ id name set names utf8mb4; explain format = 'brief' select * from stu where stu.name not in (select 'guo' from exam where exam.stu_id = stu.id); id estRows task access object operator info -HashJoin 8000.00 root anti semi join, equal:[eq(subquery.stu.id, subquery.exam.stu_id)], other cond:eq(subquery.stu.name, "guo") +HashJoin 8000.00 root anti semi join, left side:TableReader, equal:[eq(subquery.stu.id, subquery.exam.stu_id)], other cond:eq(subquery.stu.name, "guo") ├─TableReader(Build) 10000.00 root data:TableFullScan │ └─TableFullScan 10000.00 cop[tikv] table:exam keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan diff --git a/tests/integrationtest/r/topn_push_down.result b/tests/integrationtest/r/topn_push_down.result index 7f0861b479..5c8f9e2dae 100644 --- a/tests/integrationtest/r/topn_push_down.result +++ b/tests/integrationtest/r/topn_push_down.result @@ -169,7 +169,7 @@ ORDER BY te.expect_time asc LIMIT 0, 5; id estRows task access object operator info Limit 0.00 root offset:0, count:5 -└─IndexJoin 0.00 root left outer join, inner:IndexReader, outer key:topn_push_down.tr.id, inner key:topn_push_down.p.relate_id, equal cond:eq(topn_push_down.tr.id, topn_push_down.p.relate_id) +└─IndexJoin 0.00 root left outer join, inner:IndexReader, left side:TopN, outer key:topn_push_down.tr.id, inner key:topn_push_down.p.relate_id, equal cond:eq(topn_push_down.tr.id, topn_push_down.p.relate_id) ├─TopN(Build) 0.00 root topn_push_down.te.expect_time, offset:0, count:5 │ └─IndexJoin 0.00 root inner join, inner:IndexLookUp, outer key:topn_push_down.tr.id, inner key:topn_push_down.te.trade_id, equal cond:eq(topn_push_down.tr.id, topn_push_down.te.trade_id) │ ├─IndexLookUp(Build) 0.00 root @@ -194,7 +194,7 @@ create table t1(a bigint, b bigint); create table t2(a bigint, b bigint); desc select * from t1 where t1.a in (select t2.a as a from t2 where t2.b > t1.b order by t1.b limit 1); id estRows task access object operator info -Apply_15 9990.00 root semi join, equal:[eq(topn_push_down.t1.a, topn_push_down.t2.a)] +Apply_15 9990.00 root semi join, left side:TableReader_18, equal:[eq(topn_push_down.t1.a, topn_push_down.t2.a)] ├─TableReader_18(Build) 9990.00 root data:Selection_17 │ └─Selection_17 9990.00 cop[tikv] not(isnull(topn_push_down.t1.a)) │ └─TableFullScan_16 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -206,7 +206,7 @@ Apply_15 9990.00 root semi join, equal:[eq(topn_push_down.t1.a, topn_push_down. └─TableFullScan_22 12487.50 cop[tikv] table:t2 keep order:false, stats:pseudo desc select * from t1 where t1.a in (select a from (select t2.a as a, t1.b as b from t2 where t2.b > t1.b) x order by b limit 1); id estRows task access object operator info -Apply_17 9990.00 root semi join, equal:[eq(topn_push_down.t1.a, topn_push_down.t2.a)] +Apply_17 9990.00 root semi join, left side:TableReader_20, equal:[eq(topn_push_down.t1.a, topn_push_down.t2.a)] ├─TableReader_20(Build) 9990.00 root data:Selection_19 │ └─Selection_19 9990.00 cop[tikv] not(isnull(topn_push_down.t1.a)) │ └─TableFullScan_18 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo @@ -230,7 +230,7 @@ explain format = 'brief' select /*+ TIDB_INLJ(t2) */ * from t t1 left join t t2 id estRows task access object operator info Limit 5.00 root offset:0, count:5 └─Selection 5.00 root isnull(topn_push_down.t.a) - └─IndexJoin 5.00 root left outer join, inner:IndexReader, outer key:topn_push_down.t.a, inner key:topn_push_down.t.a, equal cond:eq(topn_push_down.t.a, topn_push_down.t.a) + └─IndexJoin 5.00 root left outer join, inner:IndexReader, left side:TableReader, outer key:topn_push_down.t.a, inner key:topn_push_down.t.a, equal cond:eq(topn_push_down.t.a, topn_push_down.t.a) ├─TableReader(Build) 4.00 root data:TableFullScan │ └─TableFullScan 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─IndexReader(Probe) 5.00 root index:IndexRangeScan @@ -247,7 +247,7 @@ explain format = 'brief' select /*+ TIDB_SMJ(t1, t2) */ * from t t1 left join t id estRows task access object operator info Limit 5.00 root offset:0, count:5 └─Selection 5.00 root isnull(topn_push_down.t.a) - └─MergeJoin 5.00 root left outer join, left key:topn_push_down.t.a, right key:topn_push_down.t.a + └─MergeJoin 5.00 root left outer join, left side:IndexReader, left key:topn_push_down.t.a, right key:topn_push_down.t.a ├─IndexReader(Build) 4.00 root index:IndexFullScan │ └─IndexFullScan 4.00 cop[tikv] table:t2, index:idx(a) keep order:true, stats:pseudo └─IndexReader(Probe) 4.00 root index:IndexFullScan @@ -264,7 +264,7 @@ explain format = 'brief' select /*+ TIDB_HJ(t1, t2) */ * from t t1 left join t t id estRows task access object operator info Limit 5.00 root offset:0, count:5 └─Selection 5.00 root isnull(topn_push_down.t.a) - └─HashJoin 5.00 root left outer join, equal:[eq(topn_push_down.t.a, topn_push_down.t.a)] + └─HashJoin 5.00 root left outer join, left side:TableReader, equal:[eq(topn_push_down.t.a, topn_push_down.t.a)] ├─TableReader(Build) 4.00 root data:TableFullScan │ └─TableFullScan 4.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─TableReader(Probe) 10000.00 root data:TableFullScan diff --git a/tests/integrationtest/r/tpch.result b/tests/integrationtest/r/tpch.result index 11e2da4d8c..faaab7cd99 100644 --- a/tests/integrationtest/r/tpch.result +++ b/tests/integrationtest/r/tpch.result @@ -292,7 +292,7 @@ id estRows task access object operator info Sort 1.00 root tpch50.orders.o_orderpriority └─Projection 1.00 root tpch50.orders.o_orderpriority, Column#27 └─HashAgg 1.00 root group by:tpch50.orders.o_orderpriority, funcs:count(1)->Column#27, funcs:firstrow(tpch50.orders.o_orderpriority)->tpch50.orders.o_orderpriority - └─IndexHashJoin 2255437.92 root semi join, inner:IndexLookUp, outer key:tpch50.orders.o_orderkey, inner key:tpch50.lineitem.l_orderkey, equal cond:eq(tpch50.orders.o_orderkey, tpch50.lineitem.l_orderkey) + └─IndexHashJoin 2255437.92 root semi join, inner:IndexLookUp, left side:TableReader, outer key:tpch50.orders.o_orderkey, inner key:tpch50.lineitem.l_orderkey, equal cond:eq(tpch50.orders.o_orderkey, tpch50.lineitem.l_orderkey) ├─TableReader(Build) 2819297.40 root data:Selection │ └─Selection 2819297.40 cop[tikv] ge(tpch50.orders.o_orderdate, 1995-01-01 00:00:00.000000), lt(tpch50.orders.o_orderdate, 1995-04-01 00:00:00.000000) │ └─TableFullScan 75000000.00 cop[tikv] table:orders keep order:false @@ -809,7 +809,7 @@ Sort 7500000.00 root Column#19:desc, Column#18:desc └─Projection 7500000.00 root Column#18, Column#19 └─HashAgg 7500000.00 root group by:Column#18, funcs:count(1)->Column#19, funcs:firstrow(Column#18)->Column#18 └─HashAgg 7500000.00 root group by:tpch50.customer.c_custkey, funcs:count(tpch50.orders.o_orderkey)->Column#18 - └─HashJoin 60000000.00 root left outer join, equal:[eq(tpch50.customer.c_custkey, tpch50.orders.o_custkey)] + └─HashJoin 60000000.00 root left outer join, left side:TableReader, equal:[eq(tpch50.customer.c_custkey, tpch50.orders.o_custkey)] ├─TableReader(Build) 7500000.00 root data:TableFullScan │ └─TableFullScan 7500000.00 cop[tikv] table:customer keep order:false └─TableReader(Probe) 60000000.00 root data:Selection @@ -929,7 +929,7 @@ id estRows task access object operator info Sort 14.46 root Column#23:desc, tpch50.part.p_brand, tpch50.part.p_type, tpch50.part.p_size └─Projection 14.46 root tpch50.part.p_brand, tpch50.part.p_type, tpch50.part.p_size, Column#23 └─HashAgg 14.46 root group by:tpch50.part.p_brand, tpch50.part.p_size, tpch50.part.p_type, funcs:count(distinct tpch50.partsupp.ps_suppkey)->Column#23, funcs:firstrow(tpch50.part.p_brand)->tpch50.part.p_brand, funcs:firstrow(tpch50.part.p_type)->tpch50.part.p_type, funcs:firstrow(tpch50.part.p_size)->tpch50.part.p_size - └─HashJoin 3870097.51 root anti semi join, equal:[eq(tpch50.partsupp.ps_suppkey, tpch50.supplier.s_suppkey)] + └─HashJoin 3870097.51 root anti semi join, left side:Projection, equal:[eq(tpch50.partsupp.ps_suppkey, tpch50.supplier.s_suppkey)] ├─TableReader(Build) 400000.00 root data:Selection │ └─Selection 400000.00 cop[tikv] like(tpch50.supplier.s_comment, "%Customer%Complaints%", 92) │ └─TableFullScan 500000.00 cop[tikv] table:supplier keep order:false @@ -1150,7 +1150,7 @@ Sort 19999.44 root tpch50.supplier.s_name ├─HashAgg(Build) 125724.99 root group by:tpch50.partsupp.ps_suppkey, funcs:firstrow(tpch50.partsupp.ps_suppkey)->tpch50.partsupp.ps_suppkey │ └─Selection 125724.99 root gt(cast(tpch50.partsupp.ps_availqty, decimal(10,0) BINARY), mul(0.5, Column#44)) │ └─HashAgg 157156.24 root group by:tpch50.partsupp.ps_partkey, tpch50.partsupp.ps_suppkey, funcs:firstrow(tpch50.partsupp.ps_suppkey)->tpch50.partsupp.ps_suppkey, funcs:firstrow(tpch50.partsupp.ps_availqty)->tpch50.partsupp.ps_availqty, funcs:sum(tpch50.lineitem.l_quantity)->Column#44 - │ └─HashJoin 4731068.54 root left outer join, equal:[eq(tpch50.partsupp.ps_partkey, tpch50.lineitem.l_partkey) eq(tpch50.partsupp.ps_suppkey, tpch50.lineitem.l_suppkey)] + │ └─HashJoin 4731068.54 root left outer join, left side:IndexHashJoin, equal:[eq(tpch50.partsupp.ps_partkey, tpch50.lineitem.l_partkey) eq(tpch50.partsupp.ps_suppkey, tpch50.lineitem.l_suppkey)] │ ├─IndexHashJoin(Build) 157156.24 root inner join, inner:IndexLookUp, outer key:tpch50.part.p_partkey, inner key:tpch50.partsupp.ps_partkey, equal cond:eq(tpch50.part.p_partkey, tpch50.partsupp.ps_partkey) │ │ ├─TableReader(Build) 39153.78 root data:Selection │ │ │ └─Selection 39153.78 cop[tikv] like(tpch50.part.p_name, "green%", 92) @@ -1219,8 +1219,8 @@ id estRows task access object operator info Projection 100.00 root tpch50.supplier.s_name, Column#72 └─TopN 100.00 root Column#72:desc, tpch50.supplier.s_name, offset:0, count:100 └─HashAgg 12799.64 root group by:tpch50.supplier.s_name, funcs:count(1)->Column#72, funcs:firstrow(tpch50.supplier.s_name)->tpch50.supplier.s_name - └─IndexHashJoin 7814888.66 root anti semi join, inner:IndexLookUp, outer key:tpch50.lineitem.l_orderkey, inner key:tpch50.lineitem.l_orderkey, equal cond:eq(tpch50.lineitem.l_orderkey, tpch50.lineitem.l_orderkey), other cond:ne(tpch50.lineitem.l_suppkey, tpch50.lineitem.l_suppkey) - ├─IndexHashJoin(Build) 9768610.82 root semi join, inner:IndexLookUp, outer key:tpch50.lineitem.l_orderkey, inner key:tpch50.lineitem.l_orderkey, equal cond:eq(tpch50.lineitem.l_orderkey, tpch50.lineitem.l_orderkey), other cond:ne(tpch50.lineitem.l_suppkey, tpch50.lineitem.l_suppkey), ne(tpch50.lineitem.l_suppkey, tpch50.supplier.s_suppkey) + └─IndexHashJoin 7814888.66 root anti semi join, inner:IndexLookUp, left side:IndexHashJoin, outer key:tpch50.lineitem.l_orderkey, inner key:tpch50.lineitem.l_orderkey, equal cond:eq(tpch50.lineitem.l_orderkey, tpch50.lineitem.l_orderkey), other cond:ne(tpch50.lineitem.l_suppkey, tpch50.lineitem.l_suppkey) + ├─IndexHashJoin(Build) 9768610.82 root semi join, inner:IndexLookUp, left side:IndexJoin, outer key:tpch50.lineitem.l_orderkey, inner key:tpch50.lineitem.l_orderkey, equal cond:eq(tpch50.lineitem.l_orderkey, tpch50.lineitem.l_orderkey), other cond:ne(tpch50.lineitem.l_suppkey, tpch50.lineitem.l_suppkey), ne(tpch50.lineitem.l_suppkey, tpch50.supplier.s_suppkey) │ ├─IndexJoin(Build) 12210763.53 root inner join, inner:TableReader, outer key:tpch50.lineitem.l_orderkey, inner key:tpch50.orders.o_orderkey, equal cond:eq(tpch50.lineitem.l_orderkey, tpch50.orders.o_orderkey) │ │ ├─HashJoin(Build) 12033011.28 root inner join, equal:[eq(tpch50.supplier.s_suppkey, tpch50.lineitem.l_suppkey)] │ │ │ ├─HashJoin(Build) 19999.44 root inner join, equal:[eq(tpch50.nation.n_nationkey, tpch50.supplier.s_nationkey)] @@ -1293,7 +1293,7 @@ Sort 1.00 root Column#31 └─Projection 1.00 root Column#31, Column#32, Column#33 └─HashAgg 1.00 root group by:Column#36, funcs:count(1)->Column#32, funcs:sum(Column#35)->Column#33, funcs:firstrow(Column#36)->Column#31 └─Projection 0.64 root tpch50.customer.c_acctbal->Column#35, substring(tpch50.customer.c_phone, 1, 2)->Column#36 - └─HashJoin 0.64 root anti semi join, equal:[eq(tpch50.customer.c_custkey, tpch50.orders.o_custkey)] + └─HashJoin 0.64 root anti semi join, left side:TableReader, equal:[eq(tpch50.customer.c_custkey, tpch50.orders.o_custkey)] ├─TableReader(Build) 75000000.00 root data:TableFullScan │ └─TableFullScan 75000000.00 cop[tikv] table:orders keep order:false └─TableReader(Probe) 0.80 root data:Selection diff --git a/tests/integrationtest/r/util/ranger.result b/tests/integrationtest/r/util/ranger.result index c6cfef64a3..869a71b88c 100644 --- a/tests/integrationtest/r/util/ranger.result +++ b/tests/integrationtest/r/util/ranger.result @@ -557,7 +557,7 @@ analyze table t; explain format = 'brief' select t.e in (select count(*) from t s use index(idx), t t1 where s.b = 1 and s.c in (1, 2) and s.d = t.a and s.a = t1.a) from t; id estRows task access object operator info Projection 2.00 root Column#27 -└─Apply 2.00 root CARTESIAN left outer semi join, other cond:eq(util__ranger.t.e, Column#26) +└─Apply 2.00 root CARTESIAN left outer semi join, left side:TableReader, other cond:eq(util__ranger.t.e, Column#26) ├─TableReader(Build) 2.00 root data:TableFullScan │ └─TableFullScan 2.00 cop[tikv] table:t keep order:false └─StreamAgg(Probe) 2.00 root funcs:count(1)->Column#26 diff --git a/tests/integrationtest/t/planner/core/integration.test b/tests/integrationtest/t/planner/core/integration.test index 202631982e..a026f91f8d 100644 --- a/tests/integrationtest/t/planner/core/integration.test +++ b/tests/integrationtest/t/planner/core/integration.test @@ -2077,9 +2077,9 @@ disconnect conn1; drop table if exists t; create table t(a int primary key, b varchar(20)); insert into t values (1,1); ---replace_regex /:[ ]?[.0-9]+[µms]*/:/ /},.*}/}/ +--replace_regex /:[ ]?[.0-9]+[nµms]*/:/ /},.*}/}/ explain analyze select * from t where a=1; ---replace_regex /:[ ]?[.0-9]+[µms]*/:/ /},.*}/}/ +--replace_regex /:[ ]?[.0-9]+[nµms]*/:/ /},.*}/}/ explain analyze select * from t where a in (1,2,3); @@ -2087,9 +2087,9 @@ explain analyze select * from t where a in (1,2,3); drop table if exists t; create table t (a int, b int, unique index (a)); insert into t values (1,1); ---replace_regex /:[ ]?[.0-9]+[µms]*/:/ /},.*}/}/ +--replace_regex /:[ ]?[.0-9]+[nµms]*/:/ /},.*}/}/ explain analyze select * from t where a=1; ---replace_regex /:[ ]?[.0-9]+[µms]*/:/ /},.*}/}}}/ /[0-9]+ Bytes/ Bytes/ +--replace_regex /:[ ]?[.0-9]+[nµms]*/:/ /},.*}/}}}/ /[0-9]+ Bytes/ Bytes/ explain analyze insert ignore into t values (1,1),(2,2),(3,3),(4,4); @@ -2371,4 +2371,4 @@ create table t (col TEXT); select 1 from (select t.col as c0, 46578369 as c1 from t) as t where case when ( t.c0 in (t.c0, cast((cast(1 as unsigned) - cast(t.c1 as signed)) as char)) - ) then 1 else 2 end; \ No newline at end of file + ) then 1 else 2 end;