planner: Add left side operator info for hash join execution summary (#57814)

ref pingcap/tidb#56233, close pingcap/tidb#57819
This commit is contained in:
yibin
2024-12-03 17:11:47 +08:00
committed by GitHub
parent e0019df932
commit edba7e9ccb
59 changed files with 788 additions and 783 deletions

View File

@ -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())

View File

@ -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 <nil> <nil>"))
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 <nil> <nil>", "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 ",

View File

@ -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 ",

View File

@ -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",

View File

@ -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",

View File

@ -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] ",

View File

@ -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",

View File

@ -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",

View File

@ -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))",

View File

@ -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",

View File

@ -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",

View File

@ -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"
]
},
{

View File

@ -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",

View File

@ -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))

View File

@ -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:

View File

@ -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 ",

View File

@ -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))",

View File

@ -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",

View File

@ -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()

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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, <nil>->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, <nil>->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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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:<num>, loops:<num>, RU:<num>, Concurrency:OFF planner__core__cbo.t1.a, planner__core__cbo.t1.b, Column#8 <num> N/A
└─StreamAgg_11 1.00 1 root NULL time:<num>, loops:<num> funcs:sum(Column#16)->Column#8, funcs:firstrow(Column#17)->planner__core__cbo.t1.a, funcs:firstrow(Column#18)->planner__core__cbo.t1.b <num> N/A
└─Projection_53 4.00 3 root NULL time:<num>, loops:<num>, 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 <num> N/A
└─HashJoin_51 4.00 3 root NULL time:<num>, loops:<num>, build_hash_table:{total:<num>, fetch:<num>, build:<num>}, probe:{concurrency:<num>, total:<num>, max:<num>, probe:<num>, fetch and wait:<num>} inner join, equal:[eq(planner__core__cbo.t1.a, planner__core__cbo.t2.b)] <num> <num>
Projection_9 1.00 1 root NULL time:<num>, open:<num>, close:<num>, loops:<num>, RU:<num>, Concurrency:OFF planner__core__cbo.t1.a, planner__core__cbo.t1.b, Column#8 <num> N/A
└─StreamAgg_11 1.00 1 root NULL time:<num>, open:<num>, close:<num>, loops:<num> funcs:sum(Column#16)->Column#8, funcs:firstrow(Column#17)->planner__core__cbo.t1.a, funcs:firstrow(Column#18)->planner__core__cbo.t1.b <num> N/A
└─Projection_53 4.00 3 root NULL time:<num>, open:<num>, close:<num>, loops:<num>, 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 <num> N/A
└─HashJoin_51 4.00 3 root NULL time:<num>, open:<num>, close:<num>, loops:<num>, build_hash_table:{total:<num>, fetch:<num>, build:<num>}, probe:{concurrency:<num>, total:<num>, max:<num>, probe:<num>, fetch and wait:<num>} inner join, equal:[eq(planner__core__cbo.t1.a, planner__core__cbo.t2.b)] <num> <num>
├─TableReader_30(Build) 6.00 6 root NULL time.*loops.*cop_task.* data:Selection_29 <num> N/A
│ └─Selection_29 6.00 6 cop[tikv] NULL tikv_task:{time:<num>, loops:<num>} 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:<num>, loops:<num>} keep order:false N/A N/A

View File

@ -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
id estRows task access object operator info
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;
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, left side:Projection_10
├─Projection_12(Build) 1.00 root 2->Column#2
@ -2902,7 +2902,7 @@ create table t2 (a float default null, b tinyint(4) DEFAULT NULL, key b (b));
insert into t1 values (1, 1);
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);
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, 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
@ -3466,7 +3466,7 @@ INSERT INTO t2 VALUES (1,2), (2,2);
INSERT INTO t1 VALUES (1,1), (2,1), (3,1), (4,2);
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
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 side:TableReader, left key:planner__core__integration.t1.a, right key:planner__core__integration.t2.a
├─TableReader(Build) 8000.00 root data:Selection
@ -3572,7 +3572,7 @@ create table t2(id int primary key, col1 int);
create table t1(id int primary key, col1 int);
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
id estRows task access object operator info
Sort 12500.00 root 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
@ -3588,7 +3588,7 @@ explain select one.a from t1 one order by (select two.d from t2 two where two.c
insert into t2 values(1, 3), (1,4),(2,5),(2,6);
explain select one.a from t1 one order by (select two.d from t2 two where two.c = one.b);
id estRows task access object operator info
Projection_16 10000.00 root planner__core__integration.t1.a
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, left side:TableReader_22
├─TableReader_22(Build) 10000.00 root data:TableFullScan_21
@ -3619,7 +3619,7 @@ a
a
{"id": "ish"}
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
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, left side:TableReader, equal:[eq(planner__core__integration.t.a, planner__core__integration.t.a)]
├─TableReader(Build) 8000.00 root data:Selection
@ -3919,19 +3919,19 @@ create table t(a int primary key, b varchar(20));
drop table if exists t;
create table t(a int primary key, b varchar(20));
insert into t values (1,1);
explain analyze select * from t where a=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:<num>, open:<num>, close:<num>, loops:<num>, RU:<num>, Get:{num_rpc:<num>, total_time:<num>} handle:<num> N/A N/A
explain analyze select * from t where a in (1,2,3);
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:<num>, open:<num>, close:<num>, loops:<num>, RU:<num>, BatchGet:{num_rpc:<num>, total_time:<num>} 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;
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:<num>, open:<num>, close:<num>, loops:<num>, RU:<num>, Get:{num_rpc:<num>, total_time:<num>} NULL N/A N/A
explain analyze insert ignore into t values (1,1),(2,2),(3,3),(4,4);
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:<num>, open:<num>, close:<num>, loops:<num>, prepare:<num>, check_insert: {total_time:<num>, mem_insert_time:<num>, prefetch:<num>, fk_check:<num>, rpc:{BatchGet:{num_rpc:<num>, total_time:<num>}}}, RU:<num> N/A <num> Bytes N/A
drop table if exists t;

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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]*/:<num>/ /},.*}/}/
--replace_regex /:[ ]?[.0-9]+[nµms]*/:<num>/ /},.*}/}/
explain analyze select * from t where a=1;
--replace_regex /:[ ]?[.0-9]+[µms]*/:<num>/ /},.*}/}/
--replace_regex /:[ ]?[.0-9]+[nµms]*/:<num>/ /},.*}/}/
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]*/:<num>/ /},.*}/}/
--replace_regex /:[ ]?[.0-9]+[nµms]*/:<num>/ /},.*}/}/
explain analyze select * from t where a=1;
--replace_regex /:[ ]?[.0-9]+[µms]*/:<num>/ /},.*}/}}}/ /[0-9]+ Bytes/<num> Bytes/
--replace_regex /:[ ]?[.0-9]+[nµms]*/:<num>/ /},.*}/}}}/ /[0-9]+ Bytes/<num> 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;
) then 1 else 2 end;