348 lines
10 KiB
Plaintext
348 lines
10 KiB
Plaintext
drop table if exists t1, t2, t3, t4;
|
|
create table t1 (id1 int ,id2 char(10) ,id3 text,id4 blob,id5 json,id6 varchar(1000),id7 varchar(1001), PRIMARY KEY (`id1`) clustered,key id2(id2));
|
|
insert into t1 (id1,id2)values(1,1);
|
|
insert into t1 (id1,id2)values(2,2),(3,3);
|
|
create table t2 (id1 int ,id2 char(10) ,id3 text,id4 blob,id5 json,id6 varchar(1000),PRIMARY KEY (`id1`) clustered,key id2(id2));
|
|
insert into t2 (id1,id2)values(1,1);
|
|
insert into t2 (id1,id2)values(2,2),(3,3);
|
|
explain format='plan_tree' select t1.id1 from t1,t2 where t1.id2 > '1' and t2.id2 > '1';
|
|
id task access object operator info
|
|
HashJoin root CARTESIAN inner join
|
|
├─IndexReader(Build) root index:IndexRangeScan
|
|
│ └─IndexRangeScan cop[tikv] table:t2, index:id2(id2) range:("1",+inf], keep order:false, stats:pseudo
|
|
└─IndexReader(Probe) root index:IndexRangeScan
|
|
└─IndexRangeScan cop[tikv] table:t1, index:id2(id2) range:("1",+inf], keep order:false, stats:pseudo
|
|
select t1.id1 from t1,t2 where t1.id2 > '1' and t2.id2 > '1';
|
|
id1
|
|
2
|
|
2
|
|
3
|
|
3
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
1
|
|
select t1.id1,t1.id2 from t1,t2 where t1.id2 > '1' and t2.id2 > '1' ;
|
|
id1 id2
|
|
2 2
|
|
2 2
|
|
3 3
|
|
3 3
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
1
|
|
select t1.id1,t1.id3 from t1,t2 where t1.id2 > '1' and t2.id2 > '1' ;
|
|
id1 id3
|
|
2 NULL
|
|
2 NULL
|
|
3 NULL
|
|
3 NULL
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
select t1.id1,t1.id4 from t1,t2 where t1.id2 > '1' and t2.id2 > '1' ;
|
|
id1 id4
|
|
2 NULL
|
|
2 NULL
|
|
3 NULL
|
|
3 NULL
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
select t1.id1,t1.id5 from t1,t2 where t1.id2 > '1' and t2.id2 > '1' ;
|
|
id1 id5
|
|
2 NULL
|
|
2 NULL
|
|
3 NULL
|
|
3 NULL
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
select t1.id1,t1.id6 from t1,t2 where t1.id2 > '1' and t2.id2 > '1' ;
|
|
id1 id6
|
|
2 NULL
|
|
2 NULL
|
|
3 NULL
|
|
3 NULL
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
1
|
|
select t1.id1,t1.id7 from t1,t2 where t1.id2 > '1' and t2.id2 > '1' ;
|
|
id1 id7
|
|
2 NULL
|
|
2 NULL
|
|
3 NULL
|
|
3 NULL
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
explain format='plan_tree' select t1.id1 from t1,t2 where t1.id2 > '1'and t1.id1 = t2.id1;
|
|
id task access object operator info
|
|
MergeJoin root inner join, left key:executor__chunk_reuse.t1.id1, right key:executor__chunk_reuse.t2.id1
|
|
├─TableReader(Build) root data:TableFullScan
|
|
│ └─TableFullScan cop[tikv] table:t2 keep order:true, stats:pseudo
|
|
└─TableReader(Probe) root data:Selection
|
|
└─Selection cop[tikv] gt(executor__chunk_reuse.t1.id2, "1")
|
|
└─TableFullScan cop[tikv] table:t1 keep order:true, stats:pseudo
|
|
select t1.id1 from t1,t2 where t1.id2 > '1' and t1.id1 = t2.id1;
|
|
id1
|
|
2
|
|
3
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
1
|
|
select t1.id1 ,t1.id3 from t1,t2 where t1.id2 > '1' and t1.id1 = t2.id1;
|
|
id1 id3
|
|
2 NULL
|
|
3 NULL
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
select t1.id1 ,t1.id4 from t1,t2 where t1.id2 > '1' and t1.id1 = t2.id1;
|
|
id1 id4
|
|
2 NULL
|
|
3 NULL
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
select t1.id1 ,t1.id5 from t1,t2 where t1.id2 > '1' and t1.id1 = t2.id1;
|
|
id1 id5
|
|
2 NULL
|
|
3 NULL
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
select t1.id1 ,t1.id6 from t1,t2 where t1.id2 > '1' and t1.id1 = t2.id1;
|
|
id1 id6
|
|
2 NULL
|
|
3 NULL
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
1
|
|
select t1.id1 ,t1.id7 from t1,t2 where t1.id2 > '1' and t1.id1 = t2.id1;
|
|
id1 id7
|
|
2 NULL
|
|
3 NULL
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
explain format='plan_tree' select t1.id1 from t1,t2 where t1.id1 = 1 and t2.id1 = 1;
|
|
id task access object operator info
|
|
HashJoin root CARTESIAN inner join
|
|
├─Point_Get(Build) root table:t2 handle:1
|
|
└─Point_Get(Probe) root table:t1 handle:1
|
|
select t1.id1 from t1,t2 where t1.id1 = 1 and t2.id1 = 1;
|
|
id1
|
|
1
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
1
|
|
select t1.id1,t1.id2 from t1,t2 where t1.id1 = 1 and t2.id1 = 1 ;
|
|
id1 id2
|
|
1 1
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
1
|
|
select t1.id1,t1.id3 from t1,t2 where t1.id1 = 1 and t2.id1 = 1 ;
|
|
id1 id3
|
|
1 NULL
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
select t1.id1,t1.id4 from t1,t2 where t1.id1 = 1 and t2.id1 = 1 ;
|
|
id1 id4
|
|
1 NULL
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
select t1.id1,t1.id5 from t1,t2 where t1.id1 = 1 and t2.id1 = 1 ;
|
|
id1 id5
|
|
1 NULL
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
select t1.id1,t1.id6 from t1,t2 where t1.id1 = 1 and t2.id1 = 1 ;
|
|
id1 id6
|
|
1 NULL
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
1
|
|
select t1.id1,t1.id7 from t1,t2 where t1.id1 = 1 and t2.id1 = 1 ;
|
|
id1 id7
|
|
1 NULL
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
explain format='plan_tree' select t1.id1,t1.id6 ,t2.id6 from t1 join t2 on t1.id2 = '1' and t2.id2 = '2' ;
|
|
id task access object operator info
|
|
HashJoin root CARTESIAN inner join
|
|
├─IndexLookUp(Build) root
|
|
│ ├─IndexRangeScan(Build) cop[tikv] table:t2, index:id2(id2) range:["2","2"], keep order:false, stats:pseudo
|
|
│ └─TableRowIDScan(Probe) cop[tikv] table:t2 keep order:false, stats:pseudo
|
|
└─IndexLookUp(Probe) root
|
|
├─IndexRangeScan(Build) cop[tikv] table:t1, index:id2(id2) range:["1","1"], keep order:false, stats:pseudo
|
|
└─TableRowIDScan(Probe) cop[tikv] table:t1 keep order:false, stats:pseudo
|
|
select t1.id1,t1.id6 ,t2.id6 from t1 join t2 on t1.id2 = '1' and t2.id2 = '2';
|
|
id1 id6 id6
|
|
1 NULL NULL
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
1
|
|
select t1.id1,t1.id3 ,t2.id6 from t1 join t2 on t1.id2 = '1' and t2.id2 = '2';
|
|
id1 id3 id6
|
|
1 NULL NULL
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
select t1.id1,t1.id4 ,t2.id6 from t1 join t2 on t1.id2 = '1' and t2.id2 = '2';
|
|
id1 id4 id6
|
|
1 NULL NULL
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
select t1.id1,t1.id5 ,t2.id6 from t1 join t2 on t1.id2 = '1' and t2.id2 = '2';
|
|
id1 id5 id6
|
|
1 NULL NULL
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
select t1.id1,t1.id7 ,t2.id6 from t1 join t2 on t1.id2 = '1' and t2.id2 = '2';
|
|
id1 id7 id6
|
|
1 NULL NULL
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
select t1.id1,t1.id6 ,t2.id3 from t1 join t2 on t1.id2 = '1' and t2.id2 = '2';
|
|
id1 id6 id3
|
|
1 NULL NULL
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
create table t3 (id1 int ,id2 char(10),id8 int ,id3 text,id4 blob,id5 json,id6 varchar(1000),id7 varchar(1001), PRIMARY KEY (`id1`) clustered,key id2(id2),key id8(id8));
|
|
insert into t3 (id1,id2,id8)values(1,1,1),(2,2,2),(3,3,3);
|
|
explain format='plan_tree' select id1 from t3 where id2 > '3' or id8 < 10 union (select id1 from t3 where id2 > '4' or id8 < 7);
|
|
id task access object operator info
|
|
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
|
└─Union root
|
|
├─Projection root executor__chunk_reuse.t3.id1->Column
|
|
│ └─IndexMerge root type: union
|
|
│ ├─IndexRangeScan(Build) cop[tikv] table:t3, index:id2(id2) range:("3",+inf], keep order:false, stats:pseudo
|
|
│ ├─IndexRangeScan(Build) cop[tikv] table:t3, index:id8(id8) range:[-inf,10), keep order:false, stats:pseudo
|
|
│ └─TableRowIDScan(Probe) cop[tikv] table:t3 keep order:false, stats:pseudo
|
|
└─Projection root executor__chunk_reuse.t3.id1->Column
|
|
└─IndexMerge root type: union
|
|
├─IndexRangeScan(Build) cop[tikv] table:t3, index:id2(id2) range:("4",+inf], keep order:false, stats:pseudo
|
|
├─IndexRangeScan(Build) cop[tikv] table:t3, index:id8(id8) range:[-inf,7), keep order:false, stats:pseudo
|
|
└─TableRowIDScan(Probe) cop[tikv] table:t3 keep order:false, stats:pseudo
|
|
select id1 from t3 where id2 > '3' or id8 < 10 union (select id1 from t3 where id2 > '4' or id8 < 7);
|
|
id1
|
|
1
|
|
2
|
|
3
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
1
|
|
select id1 from t3 where id2 > '3' or id8 < 10 union (select id3 from t3 where id2 > '4' or id8 < 7);
|
|
id1
|
|
NULL
|
|
1
|
|
2
|
|
3
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
select id1 from t3 where id2 > '3' or id8 < 10 union (select id4 from t3 where id2 > '4' or id8 < 7);
|
|
id1
|
|
NULL
|
|
1
|
|
2
|
|
3
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
select id1 from t3 where id2 > '3' or id8 < 10 union (select id5 from t3 where id2 > '4' or id8 < 7);
|
|
id1
|
|
NULL
|
|
1
|
|
2
|
|
3
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
select id1 from t3 where id2 > '3' or id8 < 10 union (select id6 from t3 where id2 > '4' or id8 < 7);
|
|
id1
|
|
NULL
|
|
1
|
|
2
|
|
3
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
1
|
|
select id1 from t3 where id2 > '3' or id8 < 10 union (select id7 from t3 where id2 > '4' or id8 < 7);
|
|
id1
|
|
NULL
|
|
1
|
|
2
|
|
3
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
set tidb_enable_clustered_index = OFF;
|
|
create table t4 (id1 int ,id2 char(10),id8 int ,id3 text,id4 blob,id5 json,id6 varchar(1000),id7 varchar(1001), PRIMARY KEY (`id1`),key id2(id2),key id8(id8,id2));
|
|
insert into t4 (id1,id2,id8)values(1,1,1),(2,2,2),(3,3,3);
|
|
explain format='plan_tree' select id2 from t4 where id2 > '3' union (select id2 from t4 where id2 > '4');
|
|
id task access object operator info
|
|
HashAgg root group by:Column, funcs:firstrow(Column)->Column
|
|
└─Union root
|
|
├─IndexReader root index:IndexRangeScan
|
|
│ └─IndexRangeScan cop[tikv] table:t4, index:id2(id2) range:("3",+inf], keep order:false, stats:pseudo
|
|
└─IndexReader root index:IndexRangeScan
|
|
└─IndexRangeScan cop[tikv] table:t4, index:id2(id2) range:("4",+inf], keep order:false, stats:pseudo
|
|
select id2 from t4 where id2 > '3' union (select id2 from t4 where id2 > '4');
|
|
id2
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
1
|
|
select id1 from t3 where id2 > '3' or id8 < 10 union (select CHAR_LENGTH(id3) from t3 where id2 > '4' or id8 < 7);
|
|
id1
|
|
NULL
|
|
1
|
|
2
|
|
3
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
select id1 from t3 where id2 > '3' or id8 < 10 union (select CHAR_LENGTH(id2) from t3 where id2 > '4' or id8 < 7);
|
|
id1
|
|
1
|
|
2
|
|
3
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
1
|
|
select id1 from t3 where id2 > '3' or id8 < 10 union (select id2 from t3 where id2 > '4' or id8 < 7 and id3 is null);
|
|
id1
|
|
1
|
|
2
|
|
3
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
select id1 from t3 where id2 > '3' or id8 < 10 union (select id2 from t3 where id2 > '4' or id8 < 7 and char_length(id3) > 0);
|
|
id1
|
|
1
|
|
2
|
|
3
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
0
|
|
set tidb_enable_clustered_index = default;
|
|
drop table if exists t;
|
|
create table t(id int primary key, col int);
|
|
insert into t values (1, 1);
|
|
select * from t where id = 1;
|
|
id col
|
|
1 1
|
|
select @@last_sql_use_alloc;
|
|
@@last_sql_use_alloc
|
|
1
|