mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
MWL#90: Subqueries: Inside-out execution for non-semijoin materialized subqueries that are AND-parts of the WHERE
- Merge into 5.3-subqueries
This commit is contained in:
@@ -1522,6 +1522,12 @@ INSERT INTO t1 VALUES (1,1,1), (1,1,1), (1,1,2), (1,1,1), (1,1,2);
|
||||
|
||||
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
--echo # MariaDB note:
|
||||
--echo # This will show 2 for table which has 5 rows.
|
||||
--echo # This is because the access method employed is actually range access
|
||||
--echo # which scans 2 records (yes, EXPLAIN displays it incorrectly).
|
||||
--echo # our correct printing is an artifact of changing in select_describe()
|
||||
--echo # from printing table->starts.records() to tab->records.
|
||||
EXPLAIN
|
||||
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
@@ -1535,6 +1541,7 @@ INSERT INTO t1 VALUES (1,1,1), (1,1,1), (1,1,2), (1,1,1), (1,1,2);
|
||||
|
||||
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
--echo # See above "MariaDB note"
|
||||
EXPLAIN
|
||||
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
@@ -1549,6 +1556,7 @@ INSERT INTO t1 VALUES (1,1,1), (1,1,1), (1,1,2), (1,1,1), (1,1,2);
|
||||
|
||||
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
--echo # See above "MariaDB note"
|
||||
EXPLAIN
|
||||
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
|
@@ -2255,7 +2255,8 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
EXPLAIN SELECT 1 FROM t1 AS t1_outer WHERE
|
||||
a IN (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1_outer index NULL a 10 NULL 15 Using where; Using index
|
||||
1 PRIMARY SUBQUERY#2 ALL distinct_key NULL NULL NULL 8
|
||||
1 PRIMARY t1_outer ref a a 5 SUBQUERY#2.max(b) 2 Using index
|
||||
2 SUBQUERY t1 range NULL a 5 NULL 8 Using index for group-by
|
||||
EXPLAIN SELECT 1 FROM t1 AS t1_outer GROUP BY a HAVING
|
||||
a > (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2);
|
||||
|
@@ -1727,12 +1727,18 @@ SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
1
|
||||
1
|
||||
# MariaDB note:
|
||||
# This will show 2 for table which has 5 rows.
|
||||
# This is because the access method employed is actually range access
|
||||
# which scans 2 records (yes, EXPLAIN displays it incorrectly).
|
||||
# our correct printing is an artifact of changing in select_describe()
|
||||
# from printing table->starts.records() to tab->records.
|
||||
EXPLAIN
|
||||
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <derived2> system NULL NULL NULL NULL 1
|
||||
2 DERIVED t1 index c3,c2 c2 10 NULL 5
|
||||
2 DERIVED t1 index c3,c2 c2 10 NULL 2
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (c1 REAL, c2 REAL, c3 REAL, KEY (c3), KEY (c2, c3))
|
||||
ENGINE=InnoDB;
|
||||
@@ -1741,12 +1747,13 @@ SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
1
|
||||
1
|
||||
# See above "MariaDB note"
|
||||
EXPLAIN
|
||||
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <derived2> system NULL NULL NULL NULL 1
|
||||
2 DERIVED t1 index c3,c2 c2 18 NULL 5
|
||||
2 DERIVED t1 index c3,c2 c2 18 NULL 2
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (c1 DECIMAL(12,2), c2 DECIMAL(12,2), c3 DECIMAL(12,2),
|
||||
KEY (c3), KEY (c2, c3))
|
||||
@@ -1756,12 +1763,13 @@ SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
1
|
||||
1
|
||||
# See above "MariaDB note"
|
||||
EXPLAIN
|
||||
SELECT 1 FROM (SELECT COUNT(DISTINCT c1)
|
||||
FROM t1 WHERE c2 IN (1, 1) AND c3 = 2 GROUP BY c2) x;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <derived2> system NULL NULL NULL NULL 1
|
||||
2 DERIVED t1 index c3,c2 c2 14 NULL 5
|
||||
2 DERIVED t1 index c3,c2 c2 14 NULL 2
|
||||
DROP TABLE t1;
|
||||
End of 5.1 tests
|
||||
drop table if exists t1, t2, t3;
|
||||
|
@@ -55,7 +55,7 @@ id data data
|
||||
2 female no
|
||||
select t1.id from t1 union select t2.id from t2;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def id id 1 4 1 Y 32768 0 63
|
||||
def id id 1 4 1 Y 49152 0 63
|
||||
id
|
||||
1
|
||||
2
|
||||
@@ -66,7 +66,7 @@ insert into t1 values (2,'two');
|
||||
set @arg00=1 ;
|
||||
select @arg00 FROM t1 where a=1 union distinct select 1 FROM t1 where a=1;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def @arg00 @arg00 8 20 1 Y 32768 0 63
|
||||
def @arg00 @arg00 8 20 1 Y 49152 0 63
|
||||
@arg00
|
||||
1
|
||||
select * from (select @arg00) aaa;
|
||||
@@ -76,7 +76,7 @@ def aaa @arg00 @arg00 8 20 1 Y 32768 0 63
|
||||
1
|
||||
select 1 union select 1;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def 1 1 8 20 1 N 32769 0 63
|
||||
def 1 1 8 20 1 N 49153 0 63
|
||||
1
|
||||
1
|
||||
select * from (select 1 union select 1) aaa;
|
||||
|
@@ -347,7 +347,7 @@ GROUP BY t2.pk
|
||||
);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
||||
2 SUBQUERY t2 ALL int_key int_key 5 3 33.33 Using index condition; Using filesort
|
||||
2 SUBQUERY t2 ALL int_key int_key 5 0 0.00 Using index condition; Using filesort
|
||||
Warnings:
|
||||
Note 1003 select min(`test`.`t1`.`pk`) AS `MIN(t1.pk)` from `test`.`t1` where 0
|
||||
DROP TABLE t1, t2;
|
||||
|
@@ -1382,7 +1382,7 @@ NULL
|
||||
2
|
||||
explain partitions select * from t1 where a is null or a < 0 or a > 1;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pn,p2 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t1 pn,p2 ALL NULL NULL NULL NULL 2 Using where
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, name VARCHAR(20))
|
||||
ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
|
@@ -69,25 +69,25 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0,p1,p2,p3 ALL NULL NULL NULL NULL 9 Using where
|
||||
explain partitions select * from t1 where a is null or (a >= 5 and a <= 7);
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0,p2,p3 ALL NULL NULL NULL NULL 9 Using where
|
||||
1 SIMPLE t1 p0,p2,p3 ALL NULL NULL NULL NULL 7 Using where
|
||||
explain partitions select * from t1 where a is null;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 9 Using where
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 3 Using where
|
||||
explain partitions select * from t1 where a is not null;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0,p1,p2,p3 ALL NULL NULL NULL NULL 9 Using where
|
||||
explain partitions select * from t1 where a >= 1 and a < 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0,p1 ALL NULL NULL NULL NULL 9 Using where
|
||||
1 SIMPLE t1 p0,p1 ALL NULL NULL NULL NULL 5 Using where
|
||||
explain partitions select * from t1 where a >= 3 and a <= 5;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p1,p2 ALL NULL NULL NULL NULL 9 Using where
|
||||
1 SIMPLE t1 p1,p2 ALL NULL NULL NULL NULL 4 Using where
|
||||
explain partitions select * from t1 where a > 2 and a < 4;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p1 ALL NULL NULL NULL NULL 9 Using where
|
||||
1 SIMPLE t1 p1 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a > 3 and a <= 6;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p2,p3 ALL NULL NULL NULL NULL 9 Using where
|
||||
1 SIMPLE t1 p2,p3 ALL NULL NULL NULL NULL 4 Using where
|
||||
explain partitions select * from t1 where a > 5;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0,p1,p2,p3 ALL NULL NULL NULL NULL 9 Using where
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -59,13 +59,13 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pnull system NULL NULL NULL NULL 1
|
||||
explain partitions select * from t1 where a >= 0;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0,p1 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t1 p0,p1 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a < 0;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
explain partitions select * from t1 where a <= 0;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pnull,p0 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t1 pnull,p0 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a > 1;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
@@ -98,16 +98,16 @@ select * from t1 where a > 1;
|
||||
a b
|
||||
explain partitions select * from t1 where a is null;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pnull_pnullsp0,pnull_pnullsp1 ALL NULL NULL NULL NULL 6 Using where
|
||||
1 SIMPLE t1 pnull_pnullsp0,pnull_pnullsp1 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a >= 0;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0_p0sp0,p0_p0sp1,p1_p1sp0,p1_p1sp1 ALL NULL NULL NULL NULL 6 Using where
|
||||
1 SIMPLE t1 p0_p0sp0,p0_p0sp1,p1_p1sp0,p1_p1sp1 ALL NULL NULL NULL NULL 4 Using where
|
||||
explain partitions select * from t1 where a < 0;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pnull_pnullsp0,pnull_pnullsp1 ALL NULL NULL NULL NULL 6 Using where
|
||||
1 SIMPLE t1 pnull_pnullsp0,pnull_pnullsp1 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a <= 0;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pnull_pnullsp0,pnull_pnullsp1,p0_p0sp0,p0_p0sp1 ALL NULL NULL NULL NULL 6 Using where
|
||||
1 SIMPLE t1 pnull_pnullsp0,pnull_pnullsp1,p0_p0sp0,p0_p0sp1 ALL NULL NULL NULL NULL 4 Using where
|
||||
explain partitions select * from t1 where a > 1;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
|
@@ -3417,7 +3417,8 @@ AAA 8
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 9 Using where
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 9
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 23 test.t1.a,test.t1.b 1
|
||||
2 SUBQUERY t1 ALL NULL NULL NULL NULL 9 Using temporary; Using filesort
|
||||
ALTER TABLE t1 ADD INDEX(a);
|
||||
SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
|
||||
@@ -3428,7 +3429,8 @@ AAA 8
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 9 Using where
|
||||
1 PRIMARY t1 ALL a NULL NULL NULL 9
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 23 test.t1.a,test.t1.b 1
|
||||
2 SUBQUERY t1 ALL NULL NULL NULL NULL 9 Using temporary; Using filesort
|
||||
DROP TABLE t1;
|
||||
create table t1( f1 int,f2 int);
|
||||
@@ -4322,16 +4324,18 @@ CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
EXPLAIN EXTENDED SELECT 1 FROM t1 WHERE 1 IN (SELECT 1 FROM t1 GROUP BY a);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
1 PRIMARY SUBQUERY#2 const distinct_key distinct_key 4 const 1 100.00
|
||||
2 SUBQUERY t1 ALL NULL NULL NULL NULL 2 100.00 Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1003 select 1 AS `1` from `test`.`t1` where <in_optimizer>(1,1 in ( <materialize> (select 1 AS `1` from `test`.`t1` group by `test`.`t1`.`a` ), <primary_index_lookup>(1 in <temporary table> on distinct_key where ((1 = `materialized subselect`.`1`)))))
|
||||
Note 1003 select 1 AS `1` from <materialize> (select 1 AS `1` from `test`.`t1` group by `test`.`t1`.`a`) join `test`.`t1` where (`SUBQUERY#2`.`1` = 1)
|
||||
EXPLAIN EXTENDED SELECT 1 FROM t1 WHERE 1 IN (SELECT 1 FROM t1 WHERE a > 3 GROUP BY a);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
1 PRIMARY SUBQUERY#2 const distinct_key distinct_key 4 const 1 100.00
|
||||
2 SUBQUERY t1 ALL NULL NULL NULL NULL 2 100.00 Using where; Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1003 select 1 AS `1` from `test`.`t1` where <in_optimizer>(1,1 in ( <materialize> (select 1 AS `1` from `test`.`t1` where (`test`.`t1`.`a` > 3) group by `test`.`t1`.`a` ), <primary_index_lookup>(1 in <temporary table> on distinct_key where ((1 = `materialized subselect`.`1`)))))
|
||||
Note 1003 select 1 AS `1` from <materialize> (select 1 AS `1` from `test`.`t1` where (`test`.`t1`.`a` > 3) group by `test`.`t1`.`a`) join `test`.`t1` where (`SUBQUERY#2`.`1` = 1)
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#45061: Incorrectly market field caused wrong result.
|
||||
|
@@ -1017,7 +1017,7 @@ update t22 set c = '2005-12-08 15:58:27' where a = 255;
|
||||
explain select t21.* from t21,t22 where t21.a = t22.a and
|
||||
t22.a in (select t12.a from t11, t12 where t11.a in(255,256) and t11.a = t12.a and t11.c is null) and t22.c is null order by t21.a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY subselect2 ALL unique_key NULL NULL NULL 8 Using temporary; Using filesort
|
||||
1 PRIMARY SUBQUERY#2 ALL unique_key NULL NULL NULL 8 Using temporary; Using filesort
|
||||
1 PRIMARY t21 ALL NULL NULL NULL NULL 26 Using where; Using join buffer
|
||||
1 PRIMARY t22 ALL NULL NULL NULL NULL 26 Using where; Using join buffer
|
||||
2 SUBQUERY t11 ALL NULL NULL NULL NULL 8 Using where
|
||||
@@ -1035,7 +1035,7 @@ select (select max(Y.a) from t1 Y where a in (select a from t1 Z) and a < X.a) a
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY X ALL NULL NULL NULL NULL 2
|
||||
2 DEPENDENT SUBQUERY Y ALL NULL NULL NULL NULL 2 Using where
|
||||
2 DEPENDENT SUBQUERY subselect3 eq_ref unique_key unique_key 5 func 1
|
||||
2 DEPENDENT SUBQUERY SUBQUERY#3 eq_ref unique_key unique_key 5 func 1
|
||||
3 SUBQUERY Z ALL NULL NULL NULL NULL 2
|
||||
select (select max(Y.a) from t1 Y where a in (select a from t1 Z) and a < X.a) as subq from t1 X;
|
||||
subq
|
||||
@@ -1158,7 +1158,7 @@ create table t3 ( a int , filler char(100), key(a));
|
||||
insert into t3 select A.a + 10*B.a, 'filler' from t0 A, t0 B;
|
||||
explain select * from t3 where a in (select a from t2) and (a > 5 or a < 10);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY subselect2 ALL unique_key NULL NULL NULL 2
|
||||
1 PRIMARY SUBQUERY#2 ALL unique_key NULL NULL NULL 2
|
||||
1 PRIMARY t3 ref a a 5 test.t2.a 1
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 2 Using where
|
||||
select * from t3 where a in (select a from t2);
|
||||
@@ -1207,29 +1207,33 @@ insert into t3 select A.a + 10*B.a, A.a + 10*B.a, 'filler' from t1 A, t1 B, t1 C
|
||||
explain select * from t1, t3 where t3.a in (select a from t2) and (t3.a < 10 or t3.a >30) and t1.a =3;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 10 Using where
|
||||
1 PRIMARY subselect2 ALL unique_key NULL NULL NULL 10
|
||||
1 PRIMARY SUBQUERY#2 ALL unique_key NULL NULL NULL 10
|
||||
1 PRIMARY t3 ref a a 5 test.t2.a 10
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 10 Using where
|
||||
explain select straight_join * from t1 A, t1 B where A.a in (select a from t2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY A ALL NULL NULL NULL NULL 10 Using where
|
||||
1 PRIMARY A ALL NULL NULL NULL NULL 10
|
||||
1 PRIMARY B ALL NULL NULL NULL NULL 10 Using join buffer
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 5 test.A.a 1
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 10
|
||||
explain select * from t2 where a in (select straight_join A.a from t1 A, t1 B);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 10 Using where
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 10
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 5 test.t2.a 1
|
||||
2 SUBQUERY A ALL NULL NULL NULL NULL 10
|
||||
2 SUBQUERY B ALL NULL NULL NULL NULL 10 Using join buffer
|
||||
explain select * from t2 where a in (select straight_join A.a from t1 A, t1 B);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 10 Using where
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 10
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 5 test.t2.a 1
|
||||
2 SUBQUERY A ALL NULL NULL NULL NULL 10
|
||||
2 SUBQUERY B ALL NULL NULL NULL NULL 10 Using join buffer
|
||||
explain select straight_join * from t2 X, t2 Y
|
||||
where X.a in (select straight_join A.a from t1 A, t1 B);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY X ALL NULL NULL NULL NULL 10 Using where
|
||||
1 PRIMARY X ALL NULL NULL NULL NULL 10
|
||||
1 PRIMARY Y ALL NULL NULL NULL NULL 10 Using join buffer
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 5 test.X.a 1
|
||||
2 SUBQUERY A ALL NULL NULL NULL NULL 10
|
||||
2 SUBQUERY B ALL NULL NULL NULL NULL 10 Using join buffer
|
||||
create table t0 (a int, b int);
|
||||
@@ -1237,14 +1241,14 @@ insert into t0 values(1,1);
|
||||
explain select * from t0, t3 where t3.a in (select a from t2) and (t3.a < 10 or t3.a >30);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t0 system NULL NULL NULL NULL 1
|
||||
1 PRIMARY subselect2 ALL unique_key NULL NULL NULL 10
|
||||
1 PRIMARY SUBQUERY#2 ALL unique_key NULL NULL NULL 10
|
||||
1 PRIMARY t3 ref a a 5 test.t2.a 10
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 10 Using where
|
||||
create table t4 as select a as x, a as y from t1;
|
||||
explain select * from t0, t3 where (t3.a, t3.b) in (select x,y from t4) and (t3.a < 10 or t3.a >30);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t0 system NULL NULL NULL NULL 1
|
||||
1 PRIMARY subselect2 ALL unique_key NULL NULL NULL 10
|
||||
1 PRIMARY SUBQUERY#2 ALL unique_key NULL NULL NULL 10
|
||||
1 PRIMARY t3 ref a a 5 test.t4.x 10 Using where
|
||||
2 SUBQUERY t4 ALL NULL NULL NULL NULL 10 Using where
|
||||
drop table t0,t1,t2,t3,t4;
|
||||
@@ -1270,14 +1274,14 @@ set @@optimizer_switch='firstmatch=off';
|
||||
explain select * from t1 where (a,b) in (select a,b from t2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 10
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 10 func 1
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 10 func 1
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 100
|
||||
set @save_optimizer_search_depth=@@optimizer_search_depth;
|
||||
set @@optimizer_search_depth=63;
|
||||
explain select * from t1 where (a,b) in (select a,b from t2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 10
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 10 func 1
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 10 func 1
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 100
|
||||
set @@optimizer_search_depth=@save_optimizer_search_depth;
|
||||
set @@optimizer_switch=default;
|
||||
@@ -1316,7 +1320,7 @@ insert into t2 select * from t2;
|
||||
explain select * from t1 where (a,b,c) in (select X.a, Y.a, Z.a from t2 X, t2 Y, t2 Z where X.b=33);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 15 func 1
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 15 func 1
|
||||
2 SUBQUERY X ALL NULL NULL NULL NULL 6 Using where
|
||||
2 SUBQUERY Y ALL NULL NULL NULL NULL 6 Using join buffer
|
||||
2 SUBQUERY Z ALL NULL NULL NULL NULL 6 Using join buffer
|
||||
@@ -1389,7 +1393,7 @@ INNER JOIN t2 c ON c.idContact=cona.idContact
|
||||
WHERE cona.postalStripped='T2H3B2'
|
||||
);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY subselect2 ALL unique_key NULL NULL NULL 2 1.00
|
||||
1 PRIMARY SUBQUERY#2 ALL unique_key NULL NULL NULL 2 1.00
|
||||
1 PRIMARY a index PRIMARY PRIMARY 4 NULL 2 100.00 Using where; Using index; Using join buffer
|
||||
2 SUBQUERY cona ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
2 SUBQUERY c eq_ref PRIMARY PRIMARY 4 test.cona.idContact 1 100.00
|
||||
|
@@ -1021,7 +1021,7 @@ update t22 set c = '2005-12-08 15:58:27' where a = 255;
|
||||
explain select t21.* from t21,t22 where t21.a = t22.a and
|
||||
t22.a in (select t12.a from t11, t12 where t11.a in(255,256) and t11.a = t12.a and t11.c is null) and t22.c is null order by t21.a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY subselect2 ALL unique_key NULL NULL NULL 8 Using temporary; Using filesort
|
||||
1 PRIMARY SUBQUERY#2 ALL unique_key NULL NULL NULL 8 Using temporary; Using filesort
|
||||
1 PRIMARY t21 ALL NULL NULL NULL NULL 26 Using where; Using join buffer
|
||||
1 PRIMARY t22 ALL NULL NULL NULL NULL 26 Using where; Using join buffer
|
||||
2 SUBQUERY t11 ALL NULL NULL NULL NULL 8 Using where
|
||||
@@ -1040,7 +1040,7 @@ select (select max(Y.a) from t1 Y where a in (select a from t1 Z) and a < X.a) a
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY X ALL NULL NULL NULL NULL 2
|
||||
2 DEPENDENT SUBQUERY Y ALL NULL NULL NULL NULL 2 Using where
|
||||
2 DEPENDENT SUBQUERY subselect3 eq_ref unique_key unique_key 5 func 1
|
||||
2 DEPENDENT SUBQUERY SUBQUERY#3 eq_ref unique_key unique_key 5 func 1
|
||||
3 SUBQUERY Z ALL NULL NULL NULL NULL 2
|
||||
select (select max(Y.a) from t1 Y where a in (select a from t1 Z) and a < X.a) as subq from t1 X;
|
||||
subq
|
||||
@@ -1163,7 +1163,7 @@ create table t3 ( a int , filler char(100), key(a));
|
||||
insert into t3 select A.a + 10*B.a, 'filler' from t0 A, t0 B;
|
||||
explain select * from t3 where a in (select a from t2) and (a > 5 or a < 10);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY subselect2 ALL unique_key NULL NULL NULL 2
|
||||
1 PRIMARY SUBQUERY#2 ALL unique_key NULL NULL NULL 2
|
||||
1 PRIMARY t3 ref a a 5 test.t2.a 1 Using join buffer
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 2 Using where
|
||||
select * from t3 where a in (select a from t2);
|
||||
@@ -1212,29 +1212,33 @@ insert into t3 select A.a + 10*B.a, A.a + 10*B.a, 'filler' from t1 A, t1 B, t1 C
|
||||
explain select * from t1, t3 where t3.a in (select a from t2) and (t3.a < 10 or t3.a >30) and t1.a =3;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 10 Using where
|
||||
1 PRIMARY subselect2 ALL unique_key NULL NULL NULL 10
|
||||
1 PRIMARY SUBQUERY#2 ALL unique_key NULL NULL NULL 10
|
||||
1 PRIMARY t3 ref a a 5 test.t2.a 10 Using join buffer
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 10 Using where
|
||||
explain select straight_join * from t1 A, t1 B where A.a in (select a from t2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY A ALL NULL NULL NULL NULL 10 Using where
|
||||
1 PRIMARY A ALL NULL NULL NULL NULL 10
|
||||
1 PRIMARY B ALL NULL NULL NULL NULL 10 Using join buffer
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 5 test.A.a 1
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 10
|
||||
explain select * from t2 where a in (select straight_join A.a from t1 A, t1 B);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 10 Using where
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 10
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 5 test.t2.a 1
|
||||
2 SUBQUERY A ALL NULL NULL NULL NULL 10
|
||||
2 SUBQUERY B ALL NULL NULL NULL NULL 10 Using join buffer
|
||||
explain select * from t2 where a in (select straight_join A.a from t1 A, t1 B);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 10 Using where
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 10
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 5 test.t2.a 1
|
||||
2 SUBQUERY A ALL NULL NULL NULL NULL 10
|
||||
2 SUBQUERY B ALL NULL NULL NULL NULL 10 Using join buffer
|
||||
explain select straight_join * from t2 X, t2 Y
|
||||
where X.a in (select straight_join A.a from t1 A, t1 B);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY X ALL NULL NULL NULL NULL 10 Using where
|
||||
1 PRIMARY X ALL NULL NULL NULL NULL 10
|
||||
1 PRIMARY Y ALL NULL NULL NULL NULL 10 Using join buffer
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 5 test.X.a 1
|
||||
2 SUBQUERY A ALL NULL NULL NULL NULL 10
|
||||
2 SUBQUERY B ALL NULL NULL NULL NULL 10 Using join buffer
|
||||
create table t0 (a int, b int);
|
||||
@@ -1242,14 +1246,14 @@ insert into t0 values(1,1);
|
||||
explain select * from t0, t3 where t3.a in (select a from t2) and (t3.a < 10 or t3.a >30);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t0 system NULL NULL NULL NULL 1
|
||||
1 PRIMARY subselect2 ALL unique_key NULL NULL NULL 10
|
||||
1 PRIMARY SUBQUERY#2 ALL unique_key NULL NULL NULL 10
|
||||
1 PRIMARY t3 ref a a 5 test.t2.a 10 Using join buffer
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 10 Using where
|
||||
create table t4 as select a as x, a as y from t1;
|
||||
explain select * from t0, t3 where (t3.a, t3.b) in (select x,y from t4) and (t3.a < 10 or t3.a >30);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t0 system NULL NULL NULL NULL 1
|
||||
1 PRIMARY subselect2 ALL unique_key NULL NULL NULL 10
|
||||
1 PRIMARY SUBQUERY#2 ALL unique_key NULL NULL NULL 10
|
||||
1 PRIMARY t3 ref a a 5 test.t4.x 10 Using where; Using join buffer
|
||||
2 SUBQUERY t4 ALL NULL NULL NULL NULL 10 Using where
|
||||
drop table t0,t1,t2,t3,t4;
|
||||
@@ -1275,14 +1279,14 @@ set @@optimizer_switch='firstmatch=off';
|
||||
explain select * from t1 where (a,b) in (select a,b from t2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 10
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 10 func 1
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 10 func 1
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 100
|
||||
set @save_optimizer_search_depth=@@optimizer_search_depth;
|
||||
set @@optimizer_search_depth=63;
|
||||
explain select * from t1 where (a,b) in (select a,b from t2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 10
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 10 func 1
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 10 func 1
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 100
|
||||
set @@optimizer_search_depth=@save_optimizer_search_depth;
|
||||
set @@optimizer_switch=default;
|
||||
@@ -1321,7 +1325,7 @@ insert into t2 select * from t2;
|
||||
explain select * from t1 where (a,b,c) in (select X.a, Y.a, Z.a from t2 X, t2 Y, t2 Z where X.b=33);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 15 func 1
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 15 func 1
|
||||
2 SUBQUERY X ALL NULL NULL NULL NULL 6 Using where
|
||||
2 SUBQUERY Y ALL NULL NULL NULL NULL 6 Using join buffer
|
||||
2 SUBQUERY Z ALL NULL NULL NULL NULL 6 Using join buffer
|
||||
@@ -1394,7 +1398,7 @@ INNER JOIN t2 c ON c.idContact=cona.idContact
|
||||
WHERE cona.postalStripped='T2H3B2'
|
||||
);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY subselect2 ALL unique_key NULL NULL NULL 2 1.00
|
||||
1 PRIMARY SUBQUERY#2 ALL unique_key NULL NULL NULL 2 1.00
|
||||
1 PRIMARY a index PRIMARY PRIMARY 4 NULL 2 100.00 Using where; Using index; Using join buffer
|
||||
2 SUBQUERY cona ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
2 SUBQUERY c eq_ref PRIMARY PRIMARY 4 test.cona.idContact 1 100.00 Using join buffer
|
||||
|
@@ -216,7 +216,7 @@ FROM t2
|
||||
WHERE PTYPE = 'Design'));
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL t1_IDX NULL NULL NULL 5
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 3 func 1
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 3 func 1
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 6 Using where
|
||||
2 SUBQUERY t3 ALL NULL NULL NULL NULL 12 Using where; Using join buffer
|
||||
PREPARE stmt FROM "EXPLAIN SELECT EMPNAME
|
||||
@@ -231,13 +231,13 @@ WHERE EMPNUM IN
|
||||
EXECUTE stmt;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL t1_IDX NULL NULL NULL 5
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 3 func 1
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 3 func 1
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 6 Using where
|
||||
2 SUBQUERY t3 ALL NULL NULL NULL NULL 12 Using where; Using join buffer
|
||||
EXECUTE stmt;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL t1_IDX NULL NULL NULL 5
|
||||
1 SIMPLE subselect2 eq_ref unique_key unique_key 3 func 1
|
||||
1 SIMPLE SUBQUERY#2 eq_ref unique_key unique_key 3 func 1
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 6 Using where
|
||||
2 SUBQUERY t3 ALL NULL NULL NULL NULL 12 Using where; Using join buffer
|
||||
DEALLOCATE PREPARE stmt;
|
||||
@@ -254,7 +254,7 @@ FROM t2
|
||||
WHERE PTYPE = 'Design'));
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL t1_IDX NULL NULL NULL 5
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 3 func 1
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 3 func 1
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 6 Using where
|
||||
2 SUBQUERY t3 ALL NULL NULL NULL NULL 12 Using where; Using join buffer
|
||||
PREPARE stmt FROM "EXPLAIN SELECT EMPNAME
|
||||
@@ -269,13 +269,13 @@ WHERE EMPNUM IN
|
||||
EXECUTE stmt;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL t1_IDX NULL NULL NULL 5
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 3 func 1
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 3 func 1
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 6 Using where
|
||||
2 SUBQUERY t3 ALL NULL NULL NULL NULL 12 Using where; Using join buffer
|
||||
EXECUTE stmt;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL t1_IDX NULL NULL NULL 5
|
||||
1 SIMPLE subselect2 eq_ref unique_key unique_key 3 func 1
|
||||
1 SIMPLE SUBQUERY#2 eq_ref unique_key unique_key 3 func 1
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 6 Using where
|
||||
2 SUBQUERY t3 ALL NULL NULL NULL NULL 12 Using where; Using join buffer
|
||||
DEALLOCATE PREPARE stmt;
|
||||
@@ -291,7 +291,7 @@ FROM t2
|
||||
WHERE PTYPE = 'Design'));
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 5
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 3 func 1
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 3 func 1
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 6 Using where
|
||||
2 SUBQUERY t3 ALL NULL NULL NULL NULL 12 Using where; Using join buffer
|
||||
PREPARE stmt FROM "EXPLAIN SELECT EMPNAME
|
||||
@@ -306,13 +306,13 @@ WHERE EMPNUM IN
|
||||
EXECUTE stmt;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 5
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 3 func 1
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 3 func 1
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 6 Using where
|
||||
2 SUBQUERY t3 ALL NULL NULL NULL NULL 12 Using where; Using join buffer
|
||||
EXECUTE stmt;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 5
|
||||
1 SIMPLE subselect2 eq_ref unique_key unique_key 3 func 1
|
||||
1 SIMPLE SUBQUERY#2 eq_ref unique_key unique_key 3 func 1
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 6 Using where
|
||||
2 SUBQUERY t3 ALL NULL NULL NULL NULL 12 Using where; Using join buffer
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
@@ -38,10 +38,11 @@ set @@optimizer_switch='semijoin=off';
|
||||
explain extended
|
||||
select * from t1 where a1 in (select b1 from t2 where b1 > '0');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 9 test.t1.a1 1 100.00
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 5 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where <in_optimizer>(`test`.`t1`.`a1`,`test`.`t1`.`a1` in ( <materialize> (select `test`.`t2`.`b1` AS `b1` from `test`.`t2` where (`test`.`t2`.`b1` > '0') ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key where ((`test`.`t1`.`a1` = `materialized subselect`.`b1`)))))
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from <materialize> (select `test`.`t2`.`b1` AS `b1` from `test`.`t2` where (`test`.`t2`.`b1` > '0')) join `test`.`t1` where (`SUBQUERY#2`.`b1` = `test`.`t1`.`a1`)
|
||||
select * from t1 where a1 in (select b1 from t2 where b1 > '0');
|
||||
a1 a2
|
||||
1 - 01 2 - 01
|
||||
@@ -49,10 +50,11 @@ a1 a2
|
||||
explain extended
|
||||
select * from t1 where a1 in (select b1 from t2 where b1 > '0' group by b1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 9 test.t1.a1 1 100.00
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 5 100.00 Using where; Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where <in_optimizer>(`test`.`t1`.`a1`,`test`.`t1`.`a1` in ( <materialize> (select `test`.`t2`.`b1` AS `b1` from `test`.`t2` where (`test`.`t2`.`b1` > '0') group by `test`.`t2`.`b1` ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key where ((`test`.`t1`.`a1` = `materialized subselect`.`b1`)))))
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from <materialize> (select `test`.`t2`.`b1` AS `b1` from `test`.`t2` where (`test`.`t2`.`b1` > '0') group by `test`.`t2`.`b1`) join `test`.`t1` where (`SUBQUERY#2`.`b1` = `test`.`t1`.`a1`)
|
||||
select * from t1 where a1 in (select b1 from t2 where b1 > '0' group by b1);
|
||||
a1 a2
|
||||
1 - 01 2 - 01
|
||||
@@ -60,10 +62,11 @@ a1 a2
|
||||
explain extended
|
||||
select * from t1 where (a1, a2) in (select b1, b2 from t2 where b1 > '0' group by b1, b2);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 18 test.t1.a1,test.t1.a2 1 100.00
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 5 100.00 Using where; Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where (`test`.`t2`.`b1` > '0') group by `test`.`t2`.`b1`,`test`.`t2`.`b2` ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key where ((`test`.`t1`.`a1` = `materialized subselect`.`b1`) and (`test`.`t1`.`a2` = `materialized subselect`.`b2`)))))
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from <materialize> (select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where (`test`.`t2`.`b1` > '0') group by `test`.`t2`.`b1`,`test`.`t2`.`b2`) join `test`.`t1` where ((`SUBQUERY#2`.`b2` = `test`.`t1`.`a2`) and (`SUBQUERY#2`.`b1` = `test`.`t1`.`a1`))
|
||||
select * from t1 where (a1, a2) in (select b1, b2 from t2 where b1 > '0' group by b1, b2);
|
||||
a1 a2
|
||||
1 - 01 2 - 01
|
||||
@@ -71,10 +74,11 @@ a1 a2
|
||||
explain extended
|
||||
select * from t1 where (a1, a2) in (select b1, min(b2) from t2 where b1 > '0' group by b1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 18 test.t1.a1,test.t1.a2 1 100.00
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 5 100.00 Using where; Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t2`.`b1` AS `b1`,min(`test`.`t2`.`b2`) AS `min(b2)` from `test`.`t2` where (`test`.`t2`.`b1` > '0') group by `test`.`t2`.`b1` ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key where ((`test`.`t1`.`a1` = `materialized subselect`.`b1`) and (`test`.`t1`.`a2` = `materialized subselect`.`min(b2)`)))))
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from <materialize> (select `test`.`t2`.`b1` AS `b1`,min(`test`.`t2`.`b2`) AS `min(b2)` from `test`.`t2` where (`test`.`t2`.`b1` > '0') group by `test`.`t2`.`b1`) join `test`.`t1` where ((`SUBQUERY#2`.`min(b2)` = `test`.`t1`.`a2`) and (`SUBQUERY#2`.`b1` = `test`.`t1`.`a1`))
|
||||
select * from t1 where (a1, a2) in (select b1, min(b2) from t2 where b1 > '0' group by b1);
|
||||
a1 a2
|
||||
1 - 01 2 - 01
|
||||
@@ -82,10 +86,11 @@ a1 a2
|
||||
explain extended
|
||||
select * from t1i where a1 in (select b1 from t2i where b1 > '0');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1i index NULL it1i3 18 NULL 3 100.00 Using where; Using index
|
||||
1 PRIMARY t1i index it1i1,it1i3 it1i3 18 NULL 3 100.00 Using index
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 9 test.t1i.a1 1 100.00
|
||||
2 SUBQUERY t2i index it2i1,it2i3 it2i1 9 NULL 5 100.00 Using where; Using index
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from `test`.`t1i` where <in_optimizer>(`test`.`t1i`.`a1`,`test`.`t1i`.`a1` in ( <materialize> (select `test`.`t2i`.`b1` AS `b1` from `test`.`t2i` where (`test`.`t2i`.`b1` > '0') ), <primary_index_lookup>(`test`.`t1i`.`a1` in <temporary table> on distinct_key where ((`test`.`t1i`.`a1` = `materialized subselect`.`b1`)))))
|
||||
Note 1003 select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from <materialize> (select `test`.`t2i`.`b1` AS `b1` from `test`.`t2i` where (`test`.`t2i`.`b1` > '0')) join `test`.`t1i` where (`SUBQUERY#2`.`b1` = `test`.`t1i`.`a1`)
|
||||
select * from t1i where a1 in (select b1 from t2i where b1 > '0');
|
||||
a1 a2
|
||||
1 - 01 2 - 01
|
||||
@@ -93,10 +98,11 @@ a1 a2
|
||||
explain extended
|
||||
select * from t1i where a1 in (select b1 from t2i where b1 > '0' group by b1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1i index NULL it1i3 18 NULL 3 100.00 Using where; Using index
|
||||
2 SUBQUERY t2i range it2i1,it2i3 it2i1 9 NULL 3 100.00 Using where; Using index for group-by
|
||||
1 PRIMARY SUBQUERY#2 ALL distinct_key # NULL # 3 100.00 #
|
||||
1 PRIMARY t1i ref it1i1,it1i3 # 9 # 1 100.00 #
|
||||
2 SUBQUERY t2i range it2i1,it2i3 # 9 # 3 100.00 #
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from `test`.`t1i` where <in_optimizer>(`test`.`t1i`.`a1`,`test`.`t1i`.`a1` in ( <materialize> (select `test`.`t2i`.`b1` AS `b1` from `test`.`t2i` where (`test`.`t2i`.`b1` > '0') group by `test`.`t2i`.`b1` ), <primary_index_lookup>(`test`.`t1i`.`a1` in <temporary table> on distinct_key where ((`test`.`t1i`.`a1` = `materialized subselect`.`b1`)))))
|
||||
Note 1003 select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from <materialize> (select `test`.`t2i`.`b1` AS `b1` from `test`.`t2i` where (`test`.`t2i`.`b1` > '0') group by `test`.`t2i`.`b1`) join `test`.`t1i` where (`test`.`t1i`.`a1` = `SUBQUERY#2`.`b1`)
|
||||
select * from t1i where a1 in (select b1 from t2i where b1 > '0' group by b1);
|
||||
a1 a2
|
||||
1 - 01 2 - 01
|
||||
@@ -104,10 +110,11 @@ a1 a2
|
||||
explain extended
|
||||
select * from t1i where (a1, a2) in (select b1, b2 from t2i where b1 > '0');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1i index NULL it1i3 18 NULL 3 100.00 Using where; Using index
|
||||
1 PRIMARY t1i index it1i1,it1i2,it1i3 it1i3 18 NULL 3 100.00 Using index
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 18 test.t1i.a1,test.t1i.a2 1 100.00
|
||||
2 SUBQUERY t2i index it2i1,it2i3 it2i3 18 NULL 5 100.00 Using where; Using index
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from `test`.`t1i` where <in_optimizer>((`test`.`t1i`.`a1`,`test`.`t1i`.`a2`),(`test`.`t1i`.`a1`,`test`.`t1i`.`a2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b1` > '0') ), <primary_index_lookup>(`test`.`t1i`.`a1` in <temporary table> on distinct_key where ((`test`.`t1i`.`a1` = `materialized subselect`.`b1`) and (`test`.`t1i`.`a2` = `materialized subselect`.`b2`)))))
|
||||
Note 1003 select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b1` > '0')) join `test`.`t1i` where ((`SUBQUERY#2`.`b2` = `test`.`t1i`.`a2`) and (`SUBQUERY#2`.`b1` = `test`.`t1i`.`a1`))
|
||||
select * from t1i where (a1, a2) in (select b1, b2 from t2i where b1 > '0');
|
||||
a1 a2
|
||||
1 - 01 2 - 01
|
||||
@@ -115,10 +122,11 @@ a1 a2
|
||||
explain extended
|
||||
select * from t1i where (a1, a2) in (select b1, b2 from t2i where b1 > '0' group by b1, b2);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1i index NULL it1i3 18 NULL 3 100.00 Using where; Using index
|
||||
2 SUBQUERY t2i range it2i1,it2i3 it2i3 18 NULL 3 100.00 Using where; Using index for group-by
|
||||
1 PRIMARY t1i index it1i1,it1i2,it1i3 # # # 3 100.00 #
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key # # # 1 100.00 #
|
||||
2 SUBQUERY t2i range it2i1,it2i3 # # # 3 100.00 #
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from `test`.`t1i` where <in_optimizer>((`test`.`t1i`.`a1`,`test`.`t1i`.`a2`),(`test`.`t1i`.`a1`,`test`.`t1i`.`a2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b1` > '0') group by `test`.`t2i`.`b1`,`test`.`t2i`.`b2` ), <primary_index_lookup>(`test`.`t1i`.`a1` in <temporary table> on distinct_key where ((`test`.`t1i`.`a1` = `materialized subselect`.`b1`) and (`test`.`t1i`.`a2` = `materialized subselect`.`b2`)))))
|
||||
Note 1003 select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b1` > '0') group by `test`.`t2i`.`b1`,`test`.`t2i`.`b2`) join `test`.`t1i` where ((`SUBQUERY#2`.`b2` = `test`.`t1i`.`a2`) and (`SUBQUERY#2`.`b1` = `test`.`t1i`.`a1`))
|
||||
select * from t1i where (a1, a2) in (select b1, b2 from t2i where b1 > '0' group by b1, b2);
|
||||
a1 a2
|
||||
1 - 01 2 - 01
|
||||
@@ -126,10 +134,11 @@ a1 a2
|
||||
explain extended
|
||||
select * from t1i where (a1, a2) in (select b1, min(b2) from t2i where b1 > '0' group by b1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1i index NULL it1i3 18 NULL 3 100.00 Using where; Using index
|
||||
2 SUBQUERY t2i range it2i1,it2i3 it2i3 18 NULL 3 100.00 Using where; Using index for group-by
|
||||
1 PRIMARY t1i index it1i1,it1i2,it1i3 # # # 3 100.00 #
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key # # # 1 100.00 #
|
||||
2 SUBQUERY t2i range it2i1,it2i3 # # # 3 100.00 #
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from `test`.`t1i` where <in_optimizer>((`test`.`t1i`.`a1`,`test`.`t1i`.`a2`),(`test`.`t1i`.`a1`,`test`.`t1i`.`a2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,min(`test`.`t2i`.`b2`) AS `min(b2)` from `test`.`t2i` where (`test`.`t2i`.`b1` > '0') group by `test`.`t2i`.`b1` ), <primary_index_lookup>(`test`.`t1i`.`a1` in <temporary table> on distinct_key where ((`test`.`t1i`.`a1` = `materialized subselect`.`b1`) and (`test`.`t1i`.`a2` = `materialized subselect`.`min(b2)`)))))
|
||||
Note 1003 select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from <materialize> (select `test`.`t2i`.`b1` AS `b1`,min(`test`.`t2i`.`b2`) AS `min(b2)` from `test`.`t2i` where (`test`.`t2i`.`b1` > '0') group by `test`.`t2i`.`b1`) join `test`.`t1i` where ((`SUBQUERY#2`.`min(b2)` = `test`.`t1i`.`a2`) and (`SUBQUERY#2`.`b1` = `test`.`t1i`.`a1`))
|
||||
select * from t1i where (a1, a2) in (select b1, min(b2) from t2i where b1 > '0' group by b1);
|
||||
a1 a2
|
||||
1 - 01 2 - 01
|
||||
@@ -137,10 +146,11 @@ a1 a2
|
||||
explain extended
|
||||
select * from t1 where (a1, a2) in (select b1, max(b2) from t2i group by b1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 18 test.t1.a1,test.t1.a2 1 100.00
|
||||
2 SUBQUERY t2i range NULL it2i3 9 NULL 3 100.00 Using index for group-by
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,max(`test`.`t2i`.`b2`) AS `max(b2)` from `test`.`t2i` group by `test`.`t2i`.`b1` ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key where ((`test`.`t1`.`a1` = `materialized subselect`.`b1`) and (`test`.`t1`.`a2` = `materialized subselect`.`max(b2)`)))))
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from <materialize> (select `test`.`t2i`.`b1` AS `b1`,max(`test`.`t2i`.`b2`) AS `max(b2)` from `test`.`t2i` group by `test`.`t2i`.`b1`) join `test`.`t1` where ((`SUBQUERY#2`.`max(b2)` = `test`.`t1`.`a2`) and (`SUBQUERY#2`.`b1` = `test`.`t1`.`a1`))
|
||||
select * from t1 where (a1, a2) in (select b1, max(b2) from t2i group by b1);
|
||||
a1 a2
|
||||
1 - 01 2 - 01
|
||||
@@ -148,11 +158,13 @@ a1 a2
|
||||
prepare st1 from "explain select * from t1 where (a1, a2) in (select b1, max(b2) from t2i group by b1)";
|
||||
execute st1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 18 test.t1.a1,test.t1.a2 1
|
||||
2 SUBQUERY t2i range NULL it2i3 9 NULL 3 Using index for group-by
|
||||
execute st1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 18 test.t1.a1,test.t1.a2 1
|
||||
2 SUBQUERY t2i range NULL it2i3 9 NULL 3 Using index for group-by
|
||||
prepare st2 from "select * from t1 where (a1, a2) in (select b1, max(b2) from t2i group by b1)";
|
||||
execute st2;
|
||||
@@ -166,10 +178,11 @@ a1 a2
|
||||
explain extended
|
||||
select * from t1 where (a1, a2) in (select b1, min(b2) from t2i where b1 > '0' group by b1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 18 test.t1.a1,test.t1.a2 1 100.00
|
||||
2 SUBQUERY t2i range it2i1,it2i3 it2i3 18 NULL 3 100.00 Using where; Using index for group-by
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,min(`test`.`t2i`.`b2`) AS `min(b2)` from `test`.`t2i` where (`test`.`t2i`.`b1` > '0') group by `test`.`t2i`.`b1` ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key where ((`test`.`t1`.`a1` = `materialized subselect`.`b1`) and (`test`.`t1`.`a2` = `materialized subselect`.`min(b2)`)))))
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from <materialize> (select `test`.`t2i`.`b1` AS `b1`,min(`test`.`t2i`.`b2`) AS `min(b2)` from `test`.`t2i` where (`test`.`t2i`.`b1` > '0') group by `test`.`t2i`.`b1`) join `test`.`t1` where ((`SUBQUERY#2`.`min(b2)` = `test`.`t1`.`a2`) and (`SUBQUERY#2`.`b1` = `test`.`t1`.`a1`))
|
||||
select * from t1 where (a1, a2) in (select b1, min(b2) from t2i where b1 > '0' group by b1);
|
||||
a1 a2
|
||||
1 - 01 2 - 01
|
||||
@@ -206,10 +219,11 @@ set @@optimizer_switch='default,semijoin=off';
|
||||
explain extended
|
||||
select * from t1 where (a1, a2) in (select b1, b2 from t2 order by b1, b2);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 18 test.t1.a1,test.t1.a2 1 100.00
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 5 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` order by `test`.`t2`.`b1`,`test`.`t2`.`b2` ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key where ((`test`.`t1`.`a1` = `materialized subselect`.`b1`) and (`test`.`t1`.`a2` = `materialized subselect`.`b2`)))))
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from <materialize> (select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` order by `test`.`t2`.`b1`,`test`.`t2`.`b2`) join `test`.`t1` where ((`SUBQUERY#2`.`b2` = `test`.`t1`.`a2`) and (`SUBQUERY#2`.`b1` = `test`.`t1`.`a1`))
|
||||
select * from t1 where (a1, a2) in (select b1, b2 from t2 order by b1, b2);
|
||||
a1 a2
|
||||
1 - 01 2 - 01
|
||||
@@ -217,10 +231,11 @@ a1 a2
|
||||
explain extended
|
||||
select * from t1i where (a1, a2) in (select b1, b2 from t2i order by b1, b2);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1i index NULL it1i3 18 NULL 3 100.00 Using where; Using index
|
||||
1 PRIMARY t1i index it1i1,it1i2,it1i3 it1i3 18 NULL 3 100.00 Using index
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 18 test.t1i.a1,test.t1i.a2 1 100.00
|
||||
2 SUBQUERY t2i index NULL it2i3 18 NULL 5 100.00 Using index
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from `test`.`t1i` where <in_optimizer>((`test`.`t1i`.`a1`,`test`.`t1i`.`a2`),(`test`.`t1i`.`a1`,`test`.`t1i`.`a2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` order by `test`.`t2i`.`b1`,`test`.`t2i`.`b2` ), <primary_index_lookup>(`test`.`t1i`.`a1` in <temporary table> on distinct_key where ((`test`.`t1i`.`a1` = `materialized subselect`.`b1`) and (`test`.`t1i`.`a2` = `materialized subselect`.`b2`)))))
|
||||
Note 1003 select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` order by `test`.`t2i`.`b1`,`test`.`t2i`.`b2`) join `test`.`t1i` where ((`SUBQUERY#2`.`b2` = `test`.`t1i`.`a2`) and (`SUBQUERY#2`.`b1` = `test`.`t1i`.`a1`))
|
||||
select * from t1i where (a1, a2) in (select b1, b2 from t2i order by b1, b2);
|
||||
a1 a2
|
||||
1 - 01 2 - 01
|
||||
@@ -270,12 +285,15 @@ where (a1, a2) in (select b1, b2 from t2 where b1 > '0') and
|
||||
(a1, a2) in (select c1, c2 from t3
|
||||
where (c1, c2) in (select b1, b2 from t2i where b2 > '0'));
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
3 SUBQUERY t3 ALL NULL NULL NULL NULL 4 100.00 Using where
|
||||
1 PRIMARY SUBQUERY#2 ALL distinct_key NULL NULL NULL 5 0.00
|
||||
1 PRIMARY SUBQUERY#3 eq_ref distinct_key distinct_key 18 SUBQUERY#2.b1,SUBQUERY#2.b2 1 100.00
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer
|
||||
3 SUBQUERY t3 ALL NULL NULL NULL NULL 4 100.00
|
||||
3 SUBQUERY SUBQUERY#4 eq_ref distinct_key distinct_key 18 test.t3.c1,test.t3.c2 1 100.00
|
||||
4 SUBQUERY t2i index it2i2 it2i3 18 NULL 5 100.00 Using where; Using index
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 5 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where (<in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where (`test`.`t2`.`b1` > '0') ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key where ((`test`.`t1`.`a1` = `materialized subselect`.`b1`) and (`test`.`t1`.`a2` = `materialized subselect`.`b2`))))) and <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t3`.`c1` AS `c1`,`test`.`t3`.`c2` AS `c2` from `test`.`t3` where <in_optimizer>((`test`.`t3`.`c1`,`test`.`t3`.`c2`),(`test`.`t3`.`c1`,`test`.`t3`.`c2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0') ), <primary_index_lookup>(`test`.`t3`.`c1` in <temporary table> on distinct_key where ((`test`.`t3`.`c1` = `materialized subselect`.`b1`) and (`test`.`t3`.`c2` = `materialized subselect`.`b2`))))) ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key where ((`test`.`t1`.`a1` = `materialized subselect`.`c1`) and (`test`.`t1`.`a2` = `materialized subselect`.`c2`))))))
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from <materialize> (select `test`.`t3`.`c1` AS `c1`,`test`.`t3`.`c2` AS `c2` from <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0')) join `test`.`t3` where ((`SUBQUERY#4`.`b2` = `test`.`t3`.`c2`) and (`SUBQUERY#4`.`b1` = `test`.`t3`.`c1`))) join <materialize> (select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where (`test`.`t2`.`b1` > '0')) join `test`.`t1` where ((`SUBQUERY#3`.`c2` = `SUBQUERY#2`.`b2`) and (`test`.`t1`.`a2` = `SUBQUERY#2`.`b2`) and (`SUBQUERY#3`.`c1` = `SUBQUERY#2`.`b1`) and (`test`.`t1`.`a1` = `SUBQUERY#2`.`b1`))
|
||||
select * from t1
|
||||
where (a1, a2) in (select b1, b2 from t2 where b1 > '0') and
|
||||
(a1, a2) in (select c1, c2 from t3
|
||||
@@ -289,12 +307,15 @@ where (a1, a2) in (select b1, b2 from t2i where b1 > '0') and
|
||||
(a1, a2) in (select c1, c2 from t3i
|
||||
where (c1, c2) in (select b1, b2 from t2i where b2 > '0'));
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1i index NULL it1i3 18 NULL 3 100.00 Using where; Using index
|
||||
3 SUBQUERY t3i index NULL it3i3 18 NULL 4 100.00 Using where; Using index
|
||||
4 SUBQUERY t2i index it2i2 it2i3 18 NULL 5 100.00 Using where; Using index
|
||||
2 SUBQUERY t2i index it2i1,it2i3 it2i3 18 NULL 5 100.00 Using where; Using index
|
||||
1 PRIMARY SUBQUERY#2 ALL distinct_key # # # 5 0.00 #
|
||||
1 PRIMARY SUBQUERY#3 eq_ref distinct_key # # # 1 100.00 #
|
||||
1 PRIMARY t1i ref it1i1,it1i2,it1i3 # # # 1 100.00 #
|
||||
3 SUBQUERY t3i index it3i1,it3i2,it3i3 # # # 4 100.00 #
|
||||
3 SUBQUERY SUBQUERY#4 eq_ref distinct_key # # # 1 100.00 #
|
||||
4 SUBQUERY t2i index it2i2 # # # 5 100.00 #
|
||||
2 SUBQUERY t2i index it2i1,it2i3 # # # 5 100.00 #
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from `test`.`t1i` where (<in_optimizer>((`test`.`t1i`.`a1`,`test`.`t1i`.`a2`),(`test`.`t1i`.`a1`,`test`.`t1i`.`a2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b1` > '0') ), <primary_index_lookup>(`test`.`t1i`.`a1` in <temporary table> on distinct_key where ((`test`.`t1i`.`a1` = `materialized subselect`.`b1`) and (`test`.`t1i`.`a2` = `materialized subselect`.`b2`))))) and <in_optimizer>((`test`.`t1i`.`a1`,`test`.`t1i`.`a2`),(`test`.`t1i`.`a1`,`test`.`t1i`.`a2`) in ( <materialize> (select `test`.`t3i`.`c1` AS `c1`,`test`.`t3i`.`c2` AS `c2` from `test`.`t3i` where <in_optimizer>((`test`.`t3i`.`c1`,`test`.`t3i`.`c2`),(`test`.`t3i`.`c1`,`test`.`t3i`.`c2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0') ), <primary_index_lookup>(`test`.`t3i`.`c1` in <temporary table> on distinct_key where ((`test`.`t3i`.`c1` = `materialized subselect`.`b1`) and (`test`.`t3i`.`c2` = `materialized subselect`.`b2`))))) ), <primary_index_lookup>(`test`.`t1i`.`a1` in <temporary table> on distinct_key where ((`test`.`t1i`.`a1` = `materialized subselect`.`c1`) and (`test`.`t1i`.`a2` = `materialized subselect`.`c2`))))))
|
||||
Note 1003 select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from <materialize> (select `test`.`t3i`.`c1` AS `c1`,`test`.`t3i`.`c2` AS `c2` from <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0')) join `test`.`t3i` where ((`SUBQUERY#4`.`b2` = `test`.`t3i`.`c2`) and (`SUBQUERY#4`.`b1` = `test`.`t3i`.`c1`))) join <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b1` > '0')) join `test`.`t1i` where ((`SUBQUERY#3`.`c2` = `SUBQUERY#2`.`b2`) and (`test`.`t1i`.`a2` = `SUBQUERY#2`.`b2`) and (`SUBQUERY#3`.`c1` = `SUBQUERY#2`.`b1`) and (`test`.`t1i`.`a1` = `SUBQUERY#2`.`b1`))
|
||||
select * from t1i
|
||||
where (a1, a2) in (select b1, b2 from t2i where b1 > '0') and
|
||||
(a1, a2) in (select c1, c2 from t3i
|
||||
@@ -310,14 +331,17 @@ b2 in (select c2 from t3 where c2 LIKE '%03')) and
|
||||
(a1, a2) in (select c1, c2 from t3
|
||||
where (c1, c2) in (select b1, b2 from t2i where b2 > '0'));
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
5 SUBQUERY t3 ALL NULL NULL NULL NULL 4 100.00 Using where
|
||||
1 PRIMARY SUBQUERY#2 ALL distinct_key NULL NULL NULL 5 0.00
|
||||
1 PRIMARY SUBQUERY#5 eq_ref distinct_key distinct_key 18 SUBQUERY#2.b1,SUBQUERY#2.b2 1 100.00
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer
|
||||
5 SUBQUERY t3 ALL NULL NULL NULL NULL 4 100.00
|
||||
5 SUBQUERY SUBQUERY#6 eq_ref distinct_key distinct_key 18 test.t3.c1,test.t3.c2 1 100.00
|
||||
6 SUBQUERY t2i index it2i2 it2i3 18 NULL 5 100.00 Using where; Using index
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 5 100.00 Using where
|
||||
4 SUBQUERY t3 ALL NULL NULL NULL NULL 4 100.00 Using where
|
||||
3 SUBQUERY t3 ALL NULL NULL NULL NULL 4 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where (<in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where (<in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (select `test`.`t3`.`c2` AS `c2` from `test`.`t3` where (`test`.`t3`.`c2` like '%02') ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key where ((`test`.`t2`.`b2` = `materialized subselect`.`c2`))))) or <in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (select `test`.`t3`.`c2` AS `c2` from `test`.`t3` where (`test`.`t3`.`c2` like '%03') ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key where ((`test`.`t2`.`b2` = `materialized subselect`.`c2`)))))) ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key where ((`test`.`t1`.`a1` = `materialized subselect`.`b1`) and (`test`.`t1`.`a2` = `materialized subselect`.`b2`))))) and <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t3`.`c1` AS `c1`,`test`.`t3`.`c2` AS `c2` from `test`.`t3` where <in_optimizer>((`test`.`t3`.`c1`,`test`.`t3`.`c2`),(`test`.`t3`.`c1`,`test`.`t3`.`c2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0') ), <primary_index_lookup>(`test`.`t3`.`c1` in <temporary table> on distinct_key where ((`test`.`t3`.`c1` = `materialized subselect`.`b1`) and (`test`.`t3`.`c2` = `materialized subselect`.`b2`))))) ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key where ((`test`.`t1`.`a1` = `materialized subselect`.`c1`) and (`test`.`t1`.`a2` = `materialized subselect`.`c2`))))))
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from <materialize> (select `test`.`t3`.`c1` AS `c1`,`test`.`t3`.`c2` AS `c2` from <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0')) join `test`.`t3` where ((`SUBQUERY#6`.`b2` = `test`.`t3`.`c2`) and (`SUBQUERY#6`.`b1` = `test`.`t3`.`c1`))) join <materialize> (select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where (<in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (select `test`.`t3`.`c2` AS `c2` from `test`.`t3` where (`test`.`t3`.`c2` like '%02') ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key where ((`test`.`t2`.`b2` = `SUBQUERY#3`.`c2`))))) or <in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (select `test`.`t3`.`c2` AS `c2` from `test`.`t3` where (`test`.`t3`.`c2` like '%03') ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key where ((`test`.`t2`.`b2` = `SUBQUERY#4`.`c2`))))))) join `test`.`t1` where ((`SUBQUERY#5`.`c2` = `SUBQUERY#2`.`b2`) and (`test`.`t1`.`a2` = `SUBQUERY#2`.`b2`) and (`SUBQUERY#5`.`c1` = `SUBQUERY#2`.`b1`) and (`test`.`t1`.`a1` = `SUBQUERY#2`.`b1`))
|
||||
select * from t1
|
||||
where (a1, a2) in (select b1, b2 from t2
|
||||
where b2 in (select c2 from t3 where c2 LIKE '%02') or
|
||||
@@ -335,14 +359,16 @@ b2 in (select c2 from t3 t3b where c2 LIKE '%03')) and
|
||||
where (c1, c2) in (select b1, b2 from t2i where b2 > '0'));
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
5 SUBQUERY t3c ALL NULL NULL NULL NULL 4 100.00 Using where
|
||||
1 PRIMARY SUBQUERY#5 eq_ref distinct_key distinct_key 18 test.t1.a1,test.t1.a2 1 100.00
|
||||
5 SUBQUERY t3c ALL NULL NULL NULL NULL 4 100.00
|
||||
5 SUBQUERY SUBQUERY#6 eq_ref distinct_key distinct_key 18 test.t3c.c1,test.t3c.c2 1 100.00
|
||||
6 SUBQUERY t2i index it2i2 it2i3 18 NULL 5 100.00 Using where; Using index
|
||||
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 5 100.00 Using where
|
||||
4 SUBQUERY t3b ALL NULL NULL NULL NULL 4 100.00 Using where
|
||||
3 DEPENDENT SUBQUERY t3a ALL NULL NULL NULL NULL 4 100.00 Using where
|
||||
Warnings:
|
||||
Note 1276 Field or reference 'test.t1.a1' of SELECT #3 was resolved in SELECT #1
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where (<in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),<exists>(select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where ((<in_optimizer>(`test`.`t2`.`b2`,<exists>(select 1 AS `Not_used` from `test`.`t3` `t3a` where ((`test`.`t3a`.`c1` = `test`.`t1`.`a1`) and (<cache>(`test`.`t2`.`b2`) = `test`.`t3a`.`c2`)))) or <in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (select `test`.`t3b`.`c2` AS `c2` from `test`.`t3` `t3b` where (`test`.`t3b`.`c2` like '%03') ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key where ((`test`.`t2`.`b2` = `materialized subselect`.`c2`)))))) and (<cache>(`test`.`t1`.`a1`) = `test`.`t2`.`b1`) and (<cache>(`test`.`t1`.`a2`) = `test`.`t2`.`b2`)))) and <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t3c`.`c1` AS `c1`,`test`.`t3c`.`c2` AS `c2` from `test`.`t3` `t3c` where <in_optimizer>((`test`.`t3c`.`c1`,`test`.`t3c`.`c2`),(`test`.`t3c`.`c1`,`test`.`t3c`.`c2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0') ), <primary_index_lookup>(`test`.`t3c`.`c1` in <temporary table> on distinct_key where ((`test`.`t3c`.`c1` = `materialized subselect`.`b1`) and (`test`.`t3c`.`c2` = `materialized subselect`.`b2`))))) ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key where ((`test`.`t1`.`a1` = `materialized subselect`.`c1`) and (`test`.`t1`.`a2` = `materialized subselect`.`c2`))))))
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from <materialize> (select `test`.`t3c`.`c1` AS `c1`,`test`.`t3c`.`c2` AS `c2` from <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0')) join `test`.`t3` `t3c` where ((`SUBQUERY#6`.`b2` = `test`.`t3c`.`c2`) and (`SUBQUERY#6`.`b1` = `test`.`t3c`.`c1`))) join `test`.`t1` where ((`SUBQUERY#5`.`c2` = `test`.`t1`.`a2`) and (`SUBQUERY#5`.`c1` = `test`.`t1`.`a1`) and <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),<exists>(select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where ((<in_optimizer>(`test`.`t2`.`b2`,<exists>(select 1 AS `Not_used` from `test`.`t3` `t3a` where ((`test`.`t3a`.`c1` = `test`.`t1`.`a1`) and (<cache>(`test`.`t2`.`b2`) = `test`.`t3a`.`c2`)))) or <in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (select `test`.`t3b`.`c2` AS `c2` from `test`.`t3` `t3b` where (`test`.`t3b`.`c2` like '%03') ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key where ((`test`.`t2`.`b2` = `SUBQUERY#4`.`c2`)))))) and (<cache>(`test`.`t1`.`a1`) = `test`.`t2`.`b1`) and (<cache>(`test`.`t1`.`a2`) = `test`.`t2`.`b2`)))))
|
||||
select * from t1
|
||||
where (a1, a2) in (select b1, b2 from t2
|
||||
where b2 in (select c2 from t3 t3a where c1 = a1) or
|
||||
@@ -366,19 +392,25 @@ where (a1, a2) in (select b1, b2 from t2i where b1 > '0') and
|
||||
(a1, a2) in (select c1, c2 from t3i
|
||||
where (c1, c2) in (select b1, b2 from t2i where b2 > '0')));
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
5 SUBQUERY t3 ALL NULL NULL NULL NULL 4 100.00 Using where
|
||||
6 SUBQUERY t2i index it2i2 it2i3 18 NULL 5 100.00 Using where; Using index
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 5 100.00 Using where; Using temporary; Using filesort
|
||||
4 SUBQUERY t3 ALL NULL NULL NULL NULL 4 100.00 Using where
|
||||
3 SUBQUERY t3 ALL NULL NULL NULL NULL 4 100.00 Using where
|
||||
7 UNION t1i index NULL it1i3 18 NULL 3 100.00 Using where; Using index
|
||||
9 SUBQUERY t3i index NULL it3i3 18 NULL 4 100.00 Using where; Using index
|
||||
10 SUBQUERY t2i index it2i2 it2i3 18 NULL 5 100.00 Using where; Using index
|
||||
8 SUBQUERY t2i index it2i1,it2i3 it2i3 18 NULL 5 100.00 Using where; Using index
|
||||
NULL UNION RESULT <union1,7> ALL NULL NULL NULL NULL NULL NULL
|
||||
1 PRIMARY SUBQUERY#2 ALL distinct_key # # # 5 0.00 #
|
||||
1 PRIMARY SUBQUERY#5 eq_ref distinct_key # # # 1 100.00 #
|
||||
1 PRIMARY t1 ALL NULL # # # 3 100.00 #
|
||||
5 SUBQUERY t3 ALL NULL # # # 4 100.00 #
|
||||
5 SUBQUERY SUBQUERY#6 eq_ref distinct_key # # # 1 100.00 #
|
||||
6 SUBQUERY t2i index it2i2 # # # 5 100.00 #
|
||||
2 SUBQUERY t2 ALL NULL # # # 5 100.00 #
|
||||
4 SUBQUERY t3 ALL NULL # # # 4 100.00 #
|
||||
3 SUBQUERY t3 ALL NULL # # # 4 100.00 #
|
||||
7 UNION SUBQUERY#8 ALL distinct_key # # # 5 0.00 #
|
||||
7 UNION SUBQUERY#9 eq_ref distinct_key # # # 1 100.00 #
|
||||
7 UNION t1i ref it1i1,it1i2,it1i3 # # # 1 100.00 #
|
||||
9 SUBQUERY t3i index it3i1,it3i2,it3i3 # # # 4 100.00 #
|
||||
9 SUBQUERY SUBQUERY#10 eq_ref distinct_key # # # 1 100.00 #
|
||||
10 SUBQUERY t2i index it2i2 # # # 5 100.00 #
|
||||
8 SUBQUERY t2i index it2i1,it2i3 # # # 5 100.00 #
|
||||
NULL UNION RESULT <union1,7> ALL NULL # # # NULL NULL #
|
||||
Warnings:
|
||||
Note 1003 (select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where (<in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where (<in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (select `test`.`t3`.`c2` AS `c2` from `test`.`t3` where (`test`.`t3`.`c2` like '%02') ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key where ((`test`.`t2`.`b2` = `materialized subselect`.`c2`))))) or <in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (select `test`.`t3`.`c2` AS `c2` from `test`.`t3` where (`test`.`t3`.`c2` like '%03') ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key where ((`test`.`t2`.`b2` = `materialized subselect`.`c2`)))))) group by `test`.`t2`.`b1`,`test`.`t2`.`b2` ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key where ((`test`.`t1`.`a1` = `materialized subselect`.`b1`) and (`test`.`t1`.`a2` = `materialized subselect`.`b2`))))) and <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t3`.`c1` AS `c1`,`test`.`t3`.`c2` AS `c2` from `test`.`t3` where <in_optimizer>((`test`.`t3`.`c1`,`test`.`t3`.`c2`),(`test`.`t3`.`c1`,`test`.`t3`.`c2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0') ), <primary_index_lookup>(`test`.`t3`.`c1` in <temporary table> on distinct_key where ((`test`.`t3`.`c1` = `materialized subselect`.`b1`) and (`test`.`t3`.`c2` = `materialized subselect`.`b2`))))) ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key where ((`test`.`t1`.`a1` = `materialized subselect`.`c1`) and (`test`.`t1`.`a2` = `materialized subselect`.`c2`))))))) union (select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from `test`.`t1i` where (<in_optimizer>((`test`.`t1i`.`a1`,`test`.`t1i`.`a2`),(`test`.`t1i`.`a1`,`test`.`t1i`.`a2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b1` > '0') ), <primary_index_lookup>(`test`.`t1i`.`a1` in <temporary table> on distinct_key where ((`test`.`t1i`.`a1` = `materialized subselect`.`b1`) and (`test`.`t1i`.`a2` = `materialized subselect`.`b2`))))) and <in_optimizer>((`test`.`t1i`.`a1`,`test`.`t1i`.`a2`),(`test`.`t1i`.`a1`,`test`.`t1i`.`a2`) in ( <materialize> (select `test`.`t3i`.`c1` AS `c1`,`test`.`t3i`.`c2` AS `c2` from `test`.`t3i` where <in_optimizer>((`test`.`t3i`.`c1`,`test`.`t3i`.`c2`),(`test`.`t3i`.`c1`,`test`.`t3i`.`c2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0') ), <primary_index_lookup>(`test`.`t3i`.`c1` in <temporary table> on distinct_key where ((`test`.`t3i`.`c1` = `materialized subselect`.`b1`) and (`test`.`t3i`.`c2` = `materialized subselect`.`b2`))))) ), <primary_index_lookup>(`test`.`t1i`.`a1` in <temporary table> on distinct_key where ((`test`.`t1i`.`a1` = `materialized subselect`.`c1`) and (`test`.`t1i`.`a2` = `materialized subselect`.`c2`)))))))
|
||||
Note 1003 (select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from <materialize> (select `test`.`t3`.`c1` AS `c1`,`test`.`t3`.`c2` AS `c2` from <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0')) join `test`.`t3` where ((`SUBQUERY#6`.`b2` = `test`.`t3`.`c2`) and (`SUBQUERY#6`.`b1` = `test`.`t3`.`c1`))) join <materialize> (select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where (<in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (select `test`.`t3`.`c2` AS `c2` from `test`.`t3` where (`test`.`t3`.`c2` like '%02') ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key where ((`test`.`t2`.`b2` = `SUBQUERY#3`.`c2`))))) or <in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (select `test`.`t3`.`c2` AS `c2` from `test`.`t3` where (`test`.`t3`.`c2` like '%03') ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key where ((`test`.`t2`.`b2` = `SUBQUERY#4`.`c2`)))))) group by `test`.`t2`.`b1`,`test`.`t2`.`b2`) join `test`.`t1` where ((`SUBQUERY#5`.`c2` = `SUBQUERY#2`.`b2`) and (`test`.`t1`.`a2` = `SUBQUERY#2`.`b2`) and (`SUBQUERY#5`.`c1` = `SUBQUERY#2`.`b1`) and (`test`.`t1`.`a1` = `SUBQUERY#2`.`b1`))) union (select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from <materialize> (select `test`.`t3i`.`c1` AS `c1`,`test`.`t3i`.`c2` AS `c2` from <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0')) join `test`.`t3i` where ((`SUBQUERY#10`.`b2` = `test`.`t3i`.`c2`) and (`SUBQUERY#10`.`b1` = `test`.`t3i`.`c1`))) join <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b1` > '0')) join `test`.`t1i` where ((`SUBQUERY#9`.`c2` = `SUBQUERY#8`.`b2`) and (`test`.`t1i`.`a2` = `SUBQUERY#8`.`b2`) and (`SUBQUERY#9`.`c1` = `SUBQUERY#8`.`b1`) and (`test`.`t1i`.`a1` = `SUBQUERY#8`.`b1`)))
|
||||
(select * from t1
|
||||
where (a1, a2) in (select b1, b2 from t2
|
||||
where b2 in (select c2 from t3 where c2 LIKE '%02') or
|
||||
@@ -401,13 +433,15 @@ where (a1, a2) in (select * from t1 where a1 > '0' UNION select * from t2 where
|
||||
where (c1, c2) in (select b1, b2 from t2i where b2 > '0'));
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
4 SUBQUERY t3 ALL NULL NULL NULL NULL 4 100.00 Using where
|
||||
1 PRIMARY SUBQUERY#4 eq_ref distinct_key distinct_key 18 test.t1.a1,test.t1.a2 1 100.00
|
||||
4 SUBQUERY t3 ALL NULL NULL NULL NULL 4 100.00
|
||||
4 SUBQUERY SUBQUERY#5 eq_ref distinct_key distinct_key 18 test.t3.c1,test.t3.c2 1 100.00
|
||||
5 SUBQUERY t2i index it2i2 it2i3 18 NULL 5 100.00 Using where; Using index
|
||||
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
3 DEPENDENT UNION t2 ALL NULL NULL NULL NULL 5 100.00 Using where
|
||||
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL NULL
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where (<in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),<exists>(select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where ((`test`.`t1`.`a1` > '0') and (<cache>(`test`.`t1`.`a1`) = `test`.`t1`.`a1`) and (<cache>(`test`.`t1`.`a2`) = `test`.`t1`.`a2`)) union select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where ((`test`.`t2`.`b1` < '9') and (<cache>(`test`.`t1`.`a1`) = `test`.`t2`.`b1`) and (<cache>(`test`.`t1`.`a2`) = `test`.`t2`.`b2`)))) and <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),(`test`.`t1`.`a1`,`test`.`t1`.`a2`) in ( <materialize> (select `test`.`t3`.`c1` AS `c1`,`test`.`t3`.`c2` AS `c2` from `test`.`t3` where <in_optimizer>((`test`.`t3`.`c1`,`test`.`t3`.`c2`),(`test`.`t3`.`c1`,`test`.`t3`.`c2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0') ), <primary_index_lookup>(`test`.`t3`.`c1` in <temporary table> on distinct_key where ((`test`.`t3`.`c1` = `materialized subselect`.`b1`) and (`test`.`t3`.`c2` = `materialized subselect`.`b2`))))) ), <primary_index_lookup>(`test`.`t1`.`a1` in <temporary table> on distinct_key where ((`test`.`t1`.`a1` = `materialized subselect`.`c1`) and (`test`.`t1`.`a2` = `materialized subselect`.`c2`))))))
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from <materialize> (select `test`.`t3`.`c1` AS `c1`,`test`.`t3`.`c2` AS `c2` from <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0')) join `test`.`t3` where ((`SUBQUERY#5`.`b2` = `test`.`t3`.`c2`) and (`SUBQUERY#5`.`b1` = `test`.`t3`.`c1`))) join `test`.`t1` where ((`SUBQUERY#4`.`c2` = `test`.`t1`.`a2`) and (`SUBQUERY#4`.`c1` = `test`.`t1`.`a1`) and <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),<exists>(select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where ((`test`.`t1`.`a1` > '0') and (<cache>(`test`.`t1`.`a1`) = `test`.`t1`.`a1`) and (<cache>(`test`.`t1`.`a2`) = `test`.`t1`.`a2`)) union select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where ((`test`.`t2`.`b1` < '9') and (<cache>(`test`.`t1`.`a1`) = `test`.`t2`.`b1`) and (<cache>(`test`.`t1`.`a2`) = `test`.`t2`.`b2`)))))
|
||||
select * from t1
|
||||
where (a1, a2) in (select * from t1 where a1 > '0' UNION select * from t2 where b1 < '9') and
|
||||
(a1, a2) in (select c1, c2 from t3
|
||||
@@ -423,14 +457,16 @@ where (c1, c2) in (select b1, b2 from t2i where b2 > '0')) and
|
||||
a1 = c1;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
1 PRIMARY SUBQUERY#4 ALL distinct_key NULL NULL NULL 4 75.00 Using where; Using join buffer
|
||||
1 PRIMARY t3 ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer
|
||||
4 SUBQUERY t3 ALL NULL NULL NULL NULL 4 100.00 Using where
|
||||
4 SUBQUERY t3 ALL NULL NULL NULL NULL 4 100.00
|
||||
4 SUBQUERY SUBQUERY#5 eq_ref distinct_key distinct_key 18 test.t3.c1,test.t3.c2 1 100.00
|
||||
5 SUBQUERY t2i index it2i2 it2i3 18 NULL 5 100.00 Using where; Using index
|
||||
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
3 DEPENDENT UNION t2 ALL NULL NULL NULL NULL 5 100.00 Using where
|
||||
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL NULL
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t3`.`c1` AS `c1`,`test`.`t3`.`c2` AS `c2` from `test`.`t1` join `test`.`t3` where ((`test`.`t3`.`c1` = `test`.`t1`.`a1`) and <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),<exists>(select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where ((`test`.`t1`.`a1` > '0') and (<cache>(`test`.`t1`.`a1`) = `test`.`t1`.`a1`) and (<cache>(`test`.`t1`.`a2`) = `test`.`t1`.`a2`)) union select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where ((`test`.`t2`.`b1` < '9') and (<cache>(`test`.`t1`.`a1`) = `test`.`t2`.`b1`) and (<cache>(`test`.`t1`.`a2`) = `test`.`t2`.`b2`)))) and <in_optimizer>((`test`.`t3`.`c1`,`test`.`t3`.`c2`),(`test`.`t3`.`c1`,`test`.`t3`.`c2`) in ( <materialize> (select `test`.`t3`.`c1` AS `c1`,`test`.`t3`.`c2` AS `c2` from `test`.`t3` where <in_optimizer>((`test`.`t3`.`c1`,`test`.`t3`.`c2`),(`test`.`t3`.`c1`,`test`.`t3`.`c2`) in ( <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0') ), <primary_index_lookup>(`test`.`t3`.`c1` in <temporary table> on distinct_key where ((`test`.`t3`.`c1` = `materialized subselect`.`b1`) and (`test`.`t3`.`c2` = `materialized subselect`.`b2`))))) ), <primary_index_lookup>(`test`.`t3`.`c1` in <temporary table> on distinct_key where ((`test`.`t3`.`c1` = `materialized subselect`.`c1`) and (`test`.`t3`.`c2` = `materialized subselect`.`c2`))))))
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t3`.`c1` AS `c1`,`test`.`t3`.`c2` AS `c2` from <materialize> (select `test`.`t3`.`c1` AS `c1`,`test`.`t3`.`c2` AS `c2` from <materialize> (select `test`.`t2i`.`b1` AS `b1`,`test`.`t2i`.`b2` AS `b2` from `test`.`t2i` where (`test`.`t2i`.`b2` > '0')) join `test`.`t3` where ((`SUBQUERY#5`.`b2` = `test`.`t3`.`c2`) and (`SUBQUERY#5`.`b1` = `test`.`t3`.`c1`))) join `test`.`t1` join `test`.`t3` where ((`test`.`t3`.`c2` = `SUBQUERY#4`.`c2`) and (`SUBQUERY#4`.`c1` = `test`.`t1`.`a1`) and (`test`.`t3`.`c1` = `test`.`t1`.`a1`) and <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),<exists>(select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where ((`test`.`t1`.`a1` > '0') and (<cache>(`test`.`t1`.`a1`) = `test`.`t1`.`a1`) and (<cache>(`test`.`t1`.`a2`) = `test`.`t1`.`a2`)) union select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where ((`test`.`t2`.`b1` < '9') and (<cache>(`test`.`t1`.`a1`) = `test`.`t2`.`b1`) and (<cache>(`test`.`t1`.`a2`) = `test`.`t2`.`b2`)))))
|
||||
select * from t1, t3
|
||||
where (a1, a2) in (select * from t1 where a1 > '0' UNION select * from t2 where b1 < '9') and
|
||||
(c1, c2) in (select c1, c2 from t3
|
||||
@@ -476,7 +512,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
Warnings:
|
||||
Note 1276 Field or reference 'test.t1.a1' of SELECT #3 was resolved in SELECT #1
|
||||
Note 1276 Field or reference 'test.t1.a2' of SELECT #6 was resolved in SELECT #1
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where (<in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),<exists>(select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where ((<in_optimizer>(`test`.`t2`.`b2`,<exists>(select 1 AS `Not_used` from `test`.`t3` `t3a` where ((`test`.`t3a`.`c1` = `test`.`t1`.`a1`) and (<cache>(`test`.`t2`.`b2`) = `test`.`t3a`.`c2`)))) or <in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (select `test`.`t3b`.`c2` AS `c2` from `test`.`t3` `t3b` where (`test`.`t3b`.`c2` like '%03') ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key where ((`test`.`t2`.`b2` = `materialized subselect`.`c2`)))))) and (<cache>(`test`.`t1`.`a1`) = `test`.`t2`.`b1`) and (<cache>(`test`.`t1`.`a2`) = `test`.`t2`.`b2`)))) and <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),<exists>(select `test`.`t3c`.`c1` AS `c1`,`test`.`t3c`.`c2` AS `c2` from `test`.`t3` `t3c` where (<in_optimizer>((`test`.`t3c`.`c1`,`test`.`t3c`.`c2`),<exists>(<index_lookup>(<cache>(`test`.`t3c`.`c1`) in t2i on it2i3 where (((`test`.`t2i`.`b2` > '0') or (`test`.`t2i`.`b2` = `test`.`t1`.`a2`)) and (<cache>(`test`.`t3c`.`c1`) = `test`.`t2i`.`b1`) and (<cache>(`test`.`t3c`.`c2`) = `test`.`t2i`.`b2`))))) and (<cache>(`test`.`t1`.`a1`) = `test`.`t3c`.`c1`) and (<cache>(`test`.`t1`.`a2`) = `test`.`t3c`.`c2`)))))
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where (<in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),<exists>(select `test`.`t2`.`b1` AS `b1`,`test`.`t2`.`b2` AS `b2` from `test`.`t2` where ((<in_optimizer>(`test`.`t2`.`b2`,<exists>(select 1 AS `Not_used` from `test`.`t3` `t3a` where ((`test`.`t3a`.`c1` = `test`.`t1`.`a1`) and (<cache>(`test`.`t2`.`b2`) = `test`.`t3a`.`c2`)))) or <in_optimizer>(`test`.`t2`.`b2`,`test`.`t2`.`b2` in ( <materialize> (select `test`.`t3b`.`c2` AS `c2` from `test`.`t3` `t3b` where (`test`.`t3b`.`c2` like '%03') ), <primary_index_lookup>(`test`.`t2`.`b2` in <temporary table> on distinct_key where ((`test`.`t2`.`b2` = `SUBQUERY#4`.`c2`)))))) and (<cache>(`test`.`t1`.`a1`) = `test`.`t2`.`b1`) and (<cache>(`test`.`t1`.`a2`) = `test`.`t2`.`b2`)))) and <in_optimizer>((`test`.`t1`.`a1`,`test`.`t1`.`a2`),<exists>(select `test`.`t3c`.`c1` AS `c1`,`test`.`t3c`.`c2` AS `c2` from `test`.`t3` `t3c` where (<in_optimizer>((`test`.`t3c`.`c1`,`test`.`t3c`.`c2`),<exists>(<index_lookup>(<cache>(`test`.`t3c`.`c1`) in t2i on it2i3 where (((`test`.`t2i`.`b2` > '0') or (`test`.`t2i`.`b2` = `test`.`t1`.`a2`)) and (<cache>(`test`.`t3c`.`c1`) = `test`.`t2i`.`b1`) and (<cache>(`test`.`t3c`.`c2`) = `test`.`t2i`.`b2`))))) and (<cache>(`test`.`t1`.`a1`) = `test`.`t3c`.`c1`) and (<cache>(`test`.`t1`.`a2`) = `test`.`t3c`.`c2`)))))
|
||||
explain extended
|
||||
select * from t1 where (a1, a2) in (select '1 - 01', '2 - 01');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
@@ -608,10 +644,11 @@ explain extended select left(a1,7), left(a2,7)
|
||||
from t1_16
|
||||
where a1 in (select substring(b1,1,16) from t2_16 where b1 > '0');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1_16 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
1 PRIMARY t1_16 ALL NULL NULL NULL NULL 3 100.00
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 20 test.t1_16.a1 1 100.00 Using where
|
||||
2 SUBQUERY t2_16 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select left(`test`.`t1_16`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_16`.`a2`,7) AS `left(a2,7)` from `test`.`t1_16` where <in_optimizer>(`test`.`t1_16`.`a1`,`test`.`t1_16`.`a1` in ( <materialize> (select substr(`test`.`t2_16`.`b1`,1,16) AS `substring(b1,1,16)` from `test`.`t2_16` where (`test`.`t2_16`.`b1` > '0') ), <primary_index_lookup>(`test`.`t1_16`.`a1` in <temporary table> on distinct_key where ((`test`.`t1_16`.`a1` = `materialized subselect`.`substring(b1,1,16)`)))))
|
||||
Note 1003 select left(`test`.`t1_16`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_16`.`a2`,7) AS `left(a2,7)` from <materialize> (select substr(`test`.`t2_16`.`b1`,1,16) AS `substring(b1,1,16)` from `test`.`t2_16` where (`test`.`t2_16`.`b1` > '0')) join `test`.`t1_16` where (`test`.`t1_16`.`a1` = `SUBQUERY#2`.`substring(b1,1,16)`)
|
||||
select left(a1,7), left(a2,7)
|
||||
from t1_16
|
||||
where a1 in (select substring(b1,1,16) from t2_16 where b1 > '0');
|
||||
@@ -637,10 +674,11 @@ explain extended select left(a1,7), left(a2,7)
|
||||
from t1_16
|
||||
where a1 in (select group_concat(b1) from t2_16 group by b2);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1_16 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
1 PRIMARY t1_16 ALL NULL NULL NULL NULL 3 100.00
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 261 test.t1_16.a1 1 100.00 Using where
|
||||
2 SUBQUERY t2_16 ALL NULL NULL NULL NULL 3 100.00 Using filesort
|
||||
Warnings:
|
||||
Note 1003 select left(`test`.`t1_16`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_16`.`a2`,7) AS `left(a2,7)` from `test`.`t1_16` where <in_optimizer>(`test`.`t1_16`.`a1`,`test`.`t1_16`.`a1` in ( <materialize> (select group_concat(`test`.`t2_16`.`b1` separator ',') AS `group_concat(b1)` from `test`.`t2_16` group by `test`.`t2_16`.`b2` ), <primary_index_lookup>(`test`.`t1_16`.`a1` in <temporary table> on distinct_key where ((`test`.`t1_16`.`a1` = `materialized subselect`.`group_concat(b1)`)))))
|
||||
Note 1003 select left(`test`.`t1_16`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_16`.`a2`,7) AS `left(a2,7)` from <materialize> (select group_concat(`test`.`t2_16`.`b1` separator ',') AS `group_concat(b1)` from `test`.`t2_16` group by `test`.`t2_16`.`b2`) join `test`.`t1_16` where (`test`.`t1_16`.`a1` = `SUBQUERY#2`.`group_concat(b1)`)
|
||||
select left(a1,7), left(a2,7)
|
||||
from t1_16
|
||||
where a1 in (select group_concat(b1) from t2_16 group by b2);
|
||||
@@ -660,9 +698,10 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
2 DEPENDENT SUBQUERY t1_16 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
3 DEPENDENT SUBQUERY t2_16 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
3 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 5 100.00 Using where; Using join buffer
|
||||
3 DEPENDENT SUBQUERY SUBQUERY#4 eq_ref distinct_key distinct_key 9 test.t2.b1 1 100.00 Using where
|
||||
4 SUBQUERY t3 ALL NULL NULL NULL NULL 4 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where <in_optimizer>(concat(`test`.`t1`.`a1`,'x'),<exists>(select 1 AS `Not_used` from `test`.`t1_16` where (<in_optimizer>((`test`.`t1_16`.`a1`,`test`.`t1_16`.`a2`),<exists>(select `test`.`t2_16`.`b1` AS `b1`,`test`.`t2_16`.`b2` AS `b2` from `test`.`t2_16` join `test`.`t2` where ((`test`.`t2`.`b2` = substr(`test`.`t2_16`.`b2`,1,6)) and <in_optimizer>(`test`.`t2`.`b1`,`test`.`t2`.`b1` in ( <materialize> (select `test`.`t3`.`c1` AS `c1` from `test`.`t3` where (`test`.`t3`.`c2` > '0') ), <primary_index_lookup>(`test`.`t2`.`b1` in <temporary table> on distinct_key where ((`test`.`t2`.`b1` = `materialized subselect`.`c1`))))) and (<cache>(`test`.`t1_16`.`a1`) = `test`.`t2_16`.`b1`) and (<cache>(`test`.`t1_16`.`a2`) = `test`.`t2_16`.`b2`)))) and (<cache>(concat(`test`.`t1`.`a1`,'x')) = left(`test`.`t1_16`.`a1`,8)))))
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from `test`.`t1` where <in_optimizer>(concat(`test`.`t1`.`a1`,'x'),<exists>(select 1 AS `Not_used` from `test`.`t1_16` where (<in_optimizer>((`test`.`t1_16`.`a1`,`test`.`t1_16`.`a2`),<exists>(select `test`.`t2_16`.`b1` AS `b1`,`test`.`t2_16`.`b2` AS `b2` from <materialize> (select `test`.`t3`.`c1` AS `c1` from `test`.`t3` where (`test`.`t3`.`c2` > '0')) join `test`.`t2_16` join `test`.`t2` where ((`SUBQUERY#4`.`c1` = `test`.`t2`.`b1`) and (`test`.`t2`.`b2` = substr(`test`.`t2_16`.`b2`,1,6)) and (<cache>(`test`.`t1_16`.`a1`) = `test`.`t2_16`.`b1`) and (<cache>(`test`.`t1_16`.`a2`) = `test`.`t2_16`.`b2`)))) and (<cache>(concat(`test`.`t1`.`a1`,'x')) = left(`test`.`t1_16`.`a1`,8)))))
|
||||
drop table t1_16, t2_16, t3_16;
|
||||
set @blob_len = 512;
|
||||
set @suffix_len = @blob_len - @prefix_len;
|
||||
@@ -721,10 +760,11 @@ explain extended select left(a1,7), left(a2,7)
|
||||
from t1_512
|
||||
where a1 in (select substring(b1,1,512) from t2_512 where b1 > '0');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1_512 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
1 PRIMARY t1_512 ALL NULL NULL NULL NULL 3 100.00
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 517 test.t1_512.a1 1 100.00 Using where
|
||||
2 SUBQUERY t2_512 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select left(`test`.`t1_512`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_512`.`a2`,7) AS `left(a2,7)` from `test`.`t1_512` where <in_optimizer>(`test`.`t1_512`.`a1`,`test`.`t1_512`.`a1` in ( <materialize> (select substr(`test`.`t2_512`.`b1`,1,512) AS `substring(b1,1,512)` from `test`.`t2_512` where (`test`.`t2_512`.`b1` > '0') ), <primary_index_lookup>(`test`.`t1_512`.`a1` in <temporary table> on distinct_key where ((`test`.`t1_512`.`a1` = `materialized subselect`.`substring(b1,1,512)`)))))
|
||||
Note 1003 select left(`test`.`t1_512`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_512`.`a2`,7) AS `left(a2,7)` from <materialize> (select substr(`test`.`t2_512`.`b1`,1,512) AS `substring(b1,1,512)` from `test`.`t2_512` where (`test`.`t2_512`.`b1` > '0')) join `test`.`t1_512` where (`test`.`t1_512`.`a1` = `SUBQUERY#2`.`substring(b1,1,512)`)
|
||||
select left(a1,7), left(a2,7)
|
||||
from t1_512
|
||||
where a1 in (select substring(b1,1,512) from t2_512 where b1 > '0');
|
||||
@@ -735,10 +775,11 @@ explain extended select left(a1,7), left(a2,7)
|
||||
from t1_512
|
||||
where a1 in (select group_concat(b1) from t2_512 group by b2);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1_512 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
1 PRIMARY t1_512 ALL NULL NULL NULL NULL 3 100.00
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 261 test.t1_512.a1 1 100.00 Using where
|
||||
2 SUBQUERY t2_512 ALL NULL NULL NULL NULL 3 100.00 Using filesort
|
||||
Warnings:
|
||||
Note 1003 select left(`test`.`t1_512`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_512`.`a2`,7) AS `left(a2,7)` from `test`.`t1_512` where <in_optimizer>(`test`.`t1_512`.`a1`,`test`.`t1_512`.`a1` in ( <materialize> (select group_concat(`test`.`t2_512`.`b1` separator ',') AS `group_concat(b1)` from `test`.`t2_512` group by `test`.`t2_512`.`b2` ), <primary_index_lookup>(`test`.`t1_512`.`a1` in <temporary table> on distinct_key where ((`test`.`t1_512`.`a1` = `materialized subselect`.`group_concat(b1)`)))))
|
||||
Note 1003 select left(`test`.`t1_512`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_512`.`a2`,7) AS `left(a2,7)` from <materialize> (select group_concat(`test`.`t2_512`.`b1` separator ',') AS `group_concat(b1)` from `test`.`t2_512` group by `test`.`t2_512`.`b2`) join `test`.`t1_512` where (`test`.`t1_512`.`a1` = `SUBQUERY#2`.`group_concat(b1)`)
|
||||
select left(a1,7), left(a2,7)
|
||||
from t1_512
|
||||
where a1 in (select group_concat(b1) from t2_512 group by b2);
|
||||
@@ -748,10 +789,11 @@ explain extended select left(a1,7), left(a2,7)
|
||||
from t1_512
|
||||
where a1 in (select group_concat(b1) from t2_512 group by b2);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1_512 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
1 PRIMARY t1_512 ALL NULL NULL NULL NULL 3 100.00
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 261 test.t1_512.a1 1 100.00 Using where
|
||||
2 SUBQUERY t2_512 ALL NULL NULL NULL NULL 3 100.00 Using filesort
|
||||
Warnings:
|
||||
Note 1003 select left(`test`.`t1_512`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_512`.`a2`,7) AS `left(a2,7)` from `test`.`t1_512` where <in_optimizer>(`test`.`t1_512`.`a1`,`test`.`t1_512`.`a1` in ( <materialize> (select group_concat(`test`.`t2_512`.`b1` separator ',') AS `group_concat(b1)` from `test`.`t2_512` group by `test`.`t2_512`.`b2` ), <primary_index_lookup>(`test`.`t1_512`.`a1` in <temporary table> on distinct_key where ((`test`.`t1_512`.`a1` = `materialized subselect`.`group_concat(b1)`)))))
|
||||
Note 1003 select left(`test`.`t1_512`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_512`.`a2`,7) AS `left(a2,7)` from <materialize> (select group_concat(`test`.`t2_512`.`b1` separator ',') AS `group_concat(b1)` from `test`.`t2_512` group by `test`.`t2_512`.`b2`) join `test`.`t1_512` where (`test`.`t1_512`.`a1` = `SUBQUERY#2`.`group_concat(b1)`)
|
||||
select left(a1,7), left(a2,7)
|
||||
from t1_512
|
||||
where a1 in (select group_concat(b1) from t2_512 group by b2);
|
||||
@@ -817,7 +859,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1_1024 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
2 DEPENDENT SUBQUERY t2_1024 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select left(`test`.`t1_1024`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_1024`.`a2`,7) AS `left(a2,7)` from `test`.`t1_1024` where <in_optimizer>(`test`.`t1_1024`.`a1`,`test`.`t1_1024`.`a1` in (select 1 AS `Not_used` from `test`.`t2_1024` where ((`test`.`t2_1024`.`b1` > '0') and (<cache>(`test`.`t1_1024`.`a1`) = substr(`test`.`t2_1024`.`b1`,1,1024)))))
|
||||
Note 1003 select left(`test`.`t1_1024`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_1024`.`a2`,7) AS `left(a2,7)` from `test`.`t1_1024` where <in_optimizer>(`test`.`t1_1024`.`a1`,<exists>(select 1 AS `Not_used` from `test`.`t2_1024` where ((`test`.`t2_1024`.`b1` > '0') and (<cache>(`test`.`t1_1024`.`a1`) = substr(`test`.`t2_1024`.`b1`,1,1024)) and (<cache>(`test`.`t1_1024`.`a1`) = 1))))
|
||||
select left(a1,7), left(a2,7)
|
||||
from t1_1024
|
||||
where a1 in (select substring(b1,1,1024) from t2_1024 where b1 > '0');
|
||||
@@ -828,10 +870,11 @@ explain extended select left(a1,7), left(a2,7)
|
||||
from t1_1024
|
||||
where a1 in (select group_concat(b1) from t2_1024 group by b2);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1_1024 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
1 PRIMARY t1_1024 ALL NULL NULL NULL NULL 3 100.00
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 261 test.t1_1024.a1 1 100.00 Using where
|
||||
2 SUBQUERY t2_1024 ALL NULL NULL NULL NULL 3 100.00 Using filesort
|
||||
Warnings:
|
||||
Note 1003 select left(`test`.`t1_1024`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_1024`.`a2`,7) AS `left(a2,7)` from `test`.`t1_1024` where <in_optimizer>(`test`.`t1_1024`.`a1`,`test`.`t1_1024`.`a1` in ( <materialize> (select group_concat(`test`.`t2_1024`.`b1` separator ',') AS `group_concat(b1)` from `test`.`t2_1024` group by `test`.`t2_1024`.`b2` ), <primary_index_lookup>(`test`.`t1_1024`.`a1` in <temporary table> on distinct_key where ((`test`.`t1_1024`.`a1` = `materialized subselect`.`group_concat(b1)`)))))
|
||||
Note 1003 select left(`test`.`t1_1024`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_1024`.`a2`,7) AS `left(a2,7)` from <materialize> (select group_concat(`test`.`t2_1024`.`b1` separator ',') AS `group_concat(b1)` from `test`.`t2_1024` group by `test`.`t2_1024`.`b2`) join `test`.`t1_1024` where (`test`.`t1_1024`.`a1` = `SUBQUERY#2`.`group_concat(b1)`)
|
||||
select left(a1,7), left(a2,7)
|
||||
from t1_1024
|
||||
where a1 in (select group_concat(b1) from t2_1024 group by b2);
|
||||
@@ -841,10 +884,11 @@ explain extended select left(a1,7), left(a2,7)
|
||||
from t1_1024
|
||||
where a1 in (select group_concat(b1) from t2_1024 group by b2);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1_1024 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
1 PRIMARY t1_1024 ALL NULL NULL NULL NULL 3 100.00
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 261 test.t1_1024.a1 1 100.00 Using where
|
||||
2 SUBQUERY t2_1024 ALL NULL NULL NULL NULL 3 100.00 Using filesort
|
||||
Warnings:
|
||||
Note 1003 select left(`test`.`t1_1024`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_1024`.`a2`,7) AS `left(a2,7)` from `test`.`t1_1024` where <in_optimizer>(`test`.`t1_1024`.`a1`,`test`.`t1_1024`.`a1` in ( <materialize> (select group_concat(`test`.`t2_1024`.`b1` separator ',') AS `group_concat(b1)` from `test`.`t2_1024` group by `test`.`t2_1024`.`b2` ), <primary_index_lookup>(`test`.`t1_1024`.`a1` in <temporary table> on distinct_key where ((`test`.`t1_1024`.`a1` = `materialized subselect`.`group_concat(b1)`)))))
|
||||
Note 1003 select left(`test`.`t1_1024`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_1024`.`a2`,7) AS `left(a2,7)` from <materialize> (select group_concat(`test`.`t2_1024`.`b1` separator ',') AS `group_concat(b1)` from `test`.`t2_1024` group by `test`.`t2_1024`.`b2`) join `test`.`t1_1024` where (`test`.`t1_1024`.`a1` = `SUBQUERY#2`.`group_concat(b1)`)
|
||||
select left(a1,7), left(a2,7)
|
||||
from t1_1024
|
||||
where a1 in (select group_concat(b1) from t2_1024 group by b2);
|
||||
@@ -910,7 +954,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1_1025 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
2 DEPENDENT SUBQUERY t2_1025 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select left(`test`.`t1_1025`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_1025`.`a2`,7) AS `left(a2,7)` from `test`.`t1_1025` where <in_optimizer>(`test`.`t1_1025`.`a1`,`test`.`t1_1025`.`a1` in (select 1 AS `Not_used` from `test`.`t2_1025` where ((`test`.`t2_1025`.`b1` > '0') and (<cache>(`test`.`t1_1025`.`a1`) = substr(`test`.`t2_1025`.`b1`,1,1025)))))
|
||||
Note 1003 select left(`test`.`t1_1025`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_1025`.`a2`,7) AS `left(a2,7)` from `test`.`t1_1025` where <in_optimizer>(`test`.`t1_1025`.`a1`,<exists>(select 1 AS `Not_used` from `test`.`t2_1025` where ((`test`.`t2_1025`.`b1` > '0') and (<cache>(`test`.`t1_1025`.`a1`) = substr(`test`.`t2_1025`.`b1`,1,1025)) and (<cache>(`test`.`t1_1025`.`a1`) = 1))))
|
||||
select left(a1,7), left(a2,7)
|
||||
from t1_1025
|
||||
where a1 in (select substring(b1,1,1025) from t2_1025 where b1 > '0');
|
||||
@@ -921,10 +965,11 @@ explain extended select left(a1,7), left(a2,7)
|
||||
from t1_1025
|
||||
where a1 in (select group_concat(b1) from t2_1025 group by b2);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1_1025 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
1 PRIMARY t1_1025 ALL NULL NULL NULL NULL 3 100.00
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 261 test.t1_1025.a1 1 100.00 Using where
|
||||
2 SUBQUERY t2_1025 ALL NULL NULL NULL NULL 3 100.00 Using filesort
|
||||
Warnings:
|
||||
Note 1003 select left(`test`.`t1_1025`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_1025`.`a2`,7) AS `left(a2,7)` from `test`.`t1_1025` where <in_optimizer>(`test`.`t1_1025`.`a1`,`test`.`t1_1025`.`a1` in ( <materialize> (select group_concat(`test`.`t2_1025`.`b1` separator ',') AS `group_concat(b1)` from `test`.`t2_1025` group by `test`.`t2_1025`.`b2` ), <primary_index_lookup>(`test`.`t1_1025`.`a1` in <temporary table> on distinct_key where ((`test`.`t1_1025`.`a1` = `materialized subselect`.`group_concat(b1)`)))))
|
||||
Note 1003 select left(`test`.`t1_1025`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_1025`.`a2`,7) AS `left(a2,7)` from <materialize> (select group_concat(`test`.`t2_1025`.`b1` separator ',') AS `group_concat(b1)` from `test`.`t2_1025` group by `test`.`t2_1025`.`b2`) join `test`.`t1_1025` where (`test`.`t1_1025`.`a1` = `SUBQUERY#2`.`group_concat(b1)`)
|
||||
select left(a1,7), left(a2,7)
|
||||
from t1_1025
|
||||
where a1 in (select group_concat(b1) from t2_1025 group by b2);
|
||||
@@ -934,10 +979,11 @@ explain extended select left(a1,7), left(a2,7)
|
||||
from t1_1025
|
||||
where a1 in (select group_concat(b1) from t2_1025 group by b2);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1_1025 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
1 PRIMARY t1_1025 ALL NULL NULL NULL NULL 3 100.00
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 261 test.t1_1025.a1 1 100.00 Using where
|
||||
2 SUBQUERY t2_1025 ALL NULL NULL NULL NULL 3 100.00 Using filesort
|
||||
Warnings:
|
||||
Note 1003 select left(`test`.`t1_1025`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_1025`.`a2`,7) AS `left(a2,7)` from `test`.`t1_1025` where <in_optimizer>(`test`.`t1_1025`.`a1`,`test`.`t1_1025`.`a1` in ( <materialize> (select group_concat(`test`.`t2_1025`.`b1` separator ',') AS `group_concat(b1)` from `test`.`t2_1025` group by `test`.`t2_1025`.`b2` ), <primary_index_lookup>(`test`.`t1_1025`.`a1` in <temporary table> on distinct_key where ((`test`.`t1_1025`.`a1` = `materialized subselect`.`group_concat(b1)`)))))
|
||||
Note 1003 select left(`test`.`t1_1025`.`a1`,7) AS `left(a1,7)`,left(`test`.`t1_1025`.`a2`,7) AS `left(a2,7)` from <materialize> (select group_concat(`test`.`t2_1025`.`b1` separator ',') AS `group_concat(b1)` from `test`.`t2_1025` group by `test`.`t2_1025`.`b2`) join `test`.`t1_1025` where (`test`.`t1_1025`.`a1` = `SUBQUERY#2`.`group_concat(b1)`)
|
||||
select left(a1,7), left(a2,7)
|
||||
from t1_1025
|
||||
where a1 in (select group_concat(b1) from t2_1025 group by b2);
|
||||
@@ -956,10 +1002,11 @@ explain extended select bin(a1), bin(a2)
|
||||
from t1bit
|
||||
where (a1, a2) in (select b1, b2 from t2bit);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1bit ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
1 PRIMARY t1bit ALL NULL NULL NULL NULL 3 100.00
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 10 test.t1bit.a1,test.t1bit.a2 1 100.00 Using where
|
||||
2 SUBQUERY t2bit ALL NULL NULL NULL NULL 3 100.00
|
||||
Warnings:
|
||||
Note 1003 select conv(`test`.`t1bit`.`a1`,10,2) AS `bin(a1)`,conv(`test`.`t1bit`.`a2`,10,2) AS `bin(a2)` from `test`.`t1bit` where <in_optimizer>((`test`.`t1bit`.`a1`,`test`.`t1bit`.`a2`),(`test`.`t1bit`.`a1`,`test`.`t1bit`.`a2`) in ( <materialize> (select `test`.`t2bit`.`b1` AS `b1`,`test`.`t2bit`.`b2` AS `b2` from `test`.`t2bit` ), <primary_index_lookup>(`test`.`t1bit`.`a1` in <temporary table> on distinct_key where ((`test`.`t1bit`.`a1` = `materialized subselect`.`b1`) and (`test`.`t1bit`.`a2` = `materialized subselect`.`b2`)))))
|
||||
Note 1003 select conv(`test`.`t1bit`.`a1`,10,2) AS `bin(a1)`,conv(`test`.`t1bit`.`a2`,10,2) AS `bin(a2)` from <materialize> (select `test`.`t2bit`.`b1` AS `b1`,`test`.`t2bit`.`b2` AS `b2` from `test`.`t2bit`) join `test`.`t1bit` where ((`test`.`t1bit`.`a1` = `SUBQUERY#2`.`b1`) and (`test`.`t1bit`.`a2` = `SUBQUERY#2`.`b2`))
|
||||
select bin(a1), bin(a2)
|
||||
from t1bit
|
||||
where (a1, a2) in (select b1, b2 from t2bit);
|
||||
@@ -1027,10 +1074,11 @@ insert into t3 values (30);
|
||||
explain extended
|
||||
select a from t1 where a in (select c from t2 where d >= 20);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 7 100.00 Using where
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 7 100.00
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 4 test.t1.a 1 100.00
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 6 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where <in_optimizer>(`test`.`t1`.`a`,`test`.`t1`.`a` in ( <materialize> (select `test`.`t2`.`c` AS `c` from `test`.`t2` where (`test`.`t2`.`d` >= 20) ), <primary_index_lookup>(`test`.`t1`.`a` in <temporary table> on distinct_key where ((`test`.`t1`.`a` = `materialized subselect`.`c`)))))
|
||||
Note 1003 select `test`.`t1`.`a` AS `a` from <materialize> (select `test`.`t2`.`c` AS `c` from `test`.`t2` where (`test`.`t2`.`d` >= 20)) join `test`.`t1` where (`SUBQUERY#2`.`c` = `test`.`t1`.`a`)
|
||||
select a from t1 where a in (select c from t2 where d >= 20);
|
||||
a
|
||||
2
|
||||
@@ -1041,10 +1089,11 @@ create index it1a on t1(a);
|
||||
explain extended
|
||||
select a from t1 where a in (select c from t2 where d >= 20);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 index NULL it1a 4 NULL 7 100.00 Using where; Using index
|
||||
1 PRIMARY t1 index it1a it1a 4 NULL 7 100.00 Using index
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 4 test.t1.a 1 100.00
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 6 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where <in_optimizer>(`test`.`t1`.`a`,`test`.`t1`.`a` in ( <materialize> (select `test`.`t2`.`c` AS `c` from `test`.`t2` where (`test`.`t2`.`d` >= 20) ), <primary_index_lookup>(`test`.`t1`.`a` in <temporary table> on distinct_key where ((`test`.`t1`.`a` = `materialized subselect`.`c`)))))
|
||||
Note 1003 select `test`.`t1`.`a` AS `a` from <materialize> (select `test`.`t2`.`c` AS `c` from `test`.`t2` where (`test`.`t2`.`d` >= 20)) join `test`.`t1` where (`SUBQUERY#2`.`c` = `test`.`t1`.`a`)
|
||||
select a from t1 where a in (select c from t2 where d >= 20);
|
||||
a
|
||||
2
|
||||
@@ -1055,10 +1104,11 @@ insert into t2 values (1,10);
|
||||
explain extended
|
||||
select a from t1 where a in (select c from t2 where d >= 20);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 index NULL it1a 4 NULL 7 100.00 Using where; Using index
|
||||
1 PRIMARY t1 index it1a it1a 4 NULL 7 100.00 Using index
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 4 test.t1.a 1 100.00
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 7 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where <in_optimizer>(`test`.`t1`.`a`,`test`.`t1`.`a` in ( <materialize> (select `test`.`t2`.`c` AS `c` from `test`.`t2` where (`test`.`t2`.`d` >= 20) ), <primary_index_lookup>(`test`.`t1`.`a` in <temporary table> on distinct_key where ((`test`.`t1`.`a` = `materialized subselect`.`c`)))))
|
||||
Note 1003 select `test`.`t1`.`a` AS `a` from <materialize> (select `test`.`t2`.`c` AS `c` from `test`.`t2` where (`test`.`t2`.`d` >= 20)) join `test`.`t1` where (`SUBQUERY#2`.`c` = `test`.`t1`.`a`)
|
||||
select a from t1 where a in (select c from t2 where d >= 20);
|
||||
a
|
||||
2
|
||||
@@ -1071,7 +1121,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 index NULL it1a 4 NULL 7 100.00 Using index
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 7 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` group by `test`.`t1`.`a` having <in_optimizer>(`test`.`t1`.`a`,`test`.`t1`.`a` in ( <materialize> (select `test`.`t2`.`c` AS `c` from `test`.`t2` where (`test`.`t2`.`d` >= 20) ), <primary_index_lookup>(`test`.`t1`.`a` in <temporary table> on distinct_key where ((`test`.`t1`.`a` = `materialized subselect`.`c`)))))
|
||||
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` group by `test`.`t1`.`a` having <in_optimizer>(`test`.`t1`.`a`,`test`.`t1`.`a` in ( <materialize> (select `test`.`t2`.`c` AS `c` from `test`.`t2` where (`test`.`t2`.`d` >= 20) ), <primary_index_lookup>(`test`.`t1`.`a` in <temporary table> on distinct_key where ((`test`.`t1`.`a` = `SUBQUERY#2`.`c`)))))
|
||||
select a from t1 group by a having a in (select c from t2 where d >= 20);
|
||||
a
|
||||
2
|
||||
@@ -1083,7 +1133,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 index NULL it1a 4 NULL 7 100.00 Using index
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 7 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` group by `test`.`t1`.`a` having <in_optimizer>(`test`.`t1`.`a`,`test`.`t1`.`a` in ( <materialize> (select `test`.`t2`.`c` AS `c` from `test`.`t2` where (`test`.`t2`.`d` >= 20) ), <primary_index_lookup>(`test`.`t1`.`a` in <temporary table> on distinct_key where ((`test`.`t1`.`a` = `materialized subselect`.`c`)))))
|
||||
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` group by `test`.`t1`.`a` having <in_optimizer>(`test`.`t1`.`a`,`test`.`t1`.`a` in ( <materialize> (select `test`.`t2`.`c` AS `c` from `test`.`t2` where (`test`.`t2`.`d` >= 20) ), <primary_index_lookup>(`test`.`t1`.`a` in <temporary table> on distinct_key where ((`test`.`t1`.`a` = `SUBQUERY#2`.`c`)))))
|
||||
select a from t1 group by a having a in (select c from t2 where d >= 20);
|
||||
a
|
||||
2
|
||||
@@ -1138,10 +1188,12 @@ create table t2 (b1 int);
|
||||
insert into t1 values (5);
|
||||
explain select min(a1) from t1 where 7 in (select b1 from t2 group by b1);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||
2 SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found
|
||||
1 PRIMARY t1 system NULL NULL NULL NULL 1
|
||||
1 PRIMARY SUBQUERY#2 const distinct_key distinct_key 5 const 1
|
||||
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
||||
select min(a1) from t1 where 7 in (select b1 from t2 group by b1);
|
||||
min(a1)
|
||||
NULL
|
||||
set @@optimizer_switch='default,materialization=off';
|
||||
explain select min(a1) from t1 where 7 in (select b1 from t2 group by b1);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
@@ -1152,17 +1204,27 @@ min(a1)
|
||||
set @@optimizer_switch='default,semijoin=off';
|
||||
explain select min(a1) from t1 where 7 in (select b1 from t2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||
2 SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found
|
||||
1 PRIMARY t1 system NULL NULL NULL NULL 1
|
||||
1 PRIMARY SUBQUERY#2 const distinct_key distinct_key 5 const 1
|
||||
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
||||
select min(a1) from t1 where 7 in (select b1 from t2);
|
||||
min(a1)
|
||||
NULL
|
||||
set @@optimizer_switch='default,materialization=off';
|
||||
# with MariaDB and MWL#90, this particular case is solved:
|
||||
explain select min(a1) from t1 where 7 in (select b1 from t2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
select min(a1) from t1 where 7 in (select b1 from t2);
|
||||
min(a1)
|
||||
NULL
|
||||
# but when we go around MWL#90 code, the problem still shows up:
|
||||
explain select min(a1) from t1 where 7 in (select b1 from t2) or 2> 4;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||
2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
select min(a1) from t1 where 7 in (select b1 from t2) or 2> 4;
|
||||
min(a1)
|
||||
drop table t1,t2;
|
||||
create table t1 (a char(2), b varchar(10));
|
||||
insert into t1 values ('a', 'aaa');
|
||||
@@ -1170,7 +1232,8 @@ insert into t1 values ('aa', 'aaaa');
|
||||
set @@optimizer_switch='default,semijoin=off';
|
||||
explain select a,b from t1 where b in (select a from t1);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 Using where
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 3 test.t1.b 1 Using where
|
||||
2 SUBQUERY t1 ALL NULL NULL NULL NULL 2
|
||||
select a,b from t1 where b in (select a from t1);
|
||||
a b
|
||||
@@ -1190,7 +1253,7 @@ INSERT INTO t2 VALUES (13, 1.454);
|
||||
SET @@optimizer_switch='default,semijoin=on,materialization=on';
|
||||
EXPLAIN SELECT COUNT(*) FROM t1 WHERE (f1,f2) IN (SELECT f1,f2 FROM t2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY subselect2 ALL unique_key NULL NULL NULL 2
|
||||
1 PRIMARY SUBQUERY#2 ALL unique_key NULL NULL NULL 2
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 Using where; Using join buffer
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 2
|
||||
SELECT COUNT(*) FROM t1 WHERE (f1,f2) IN (SELECT f1,f2 FROM t2);
|
||||
@@ -1212,7 +1275,7 @@ SET @@optimizer_switch='default,semijoin=on,materialization=on';
|
||||
EXPLAIN SELECT pk FROM t1 WHERE (a) IN (SELECT a FROM t2 WHERE pk > 0);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 5 func 1
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 5 func 1
|
||||
2 SUBQUERY t2 range PRIMARY PRIMARY 4 NULL 2 Using index condition; Using MRR
|
||||
SELECT pk FROM t1 WHERE (a) IN (SELECT a FROM t2 WHERE pk > 0);
|
||||
pk
|
||||
|
@@ -1299,31 +1299,34 @@ a
|
||||
4
|
||||
explain extended select * from t2 where t2.a in (select a from t1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t2 index NULL PRIMARY 4 NULL 4 100.00 Using where; Using index
|
||||
1 PRIMARY SUBQUERY#2 ALL distinct_key NULL NULL NULL 4 100.00
|
||||
1 PRIMARY t2 index PRIMARY PRIMARY 4 NULL 4 75.00 Using where; Using index; Using join buffer
|
||||
2 SUBQUERY t1 index NULL PRIMARY 4 NULL 4 100.00 Using index
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,`test`.`t2`.`a` in ( <materialize> (select `test`.`t1`.`a` AS `a` from `test`.`t1` ), <primary_index_lookup>(`test`.`t2`.`a` in <temporary table> on distinct_key where ((`test`.`t2`.`a` = `materialized subselect`.`a`)))))
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from <materialize> (select `test`.`t1`.`a` AS `a` from `test`.`t1`) join `test`.`t2` where (`test`.`t2`.`a` = `SUBQUERY#2`.`a`)
|
||||
select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
|
||||
a
|
||||
2
|
||||
4
|
||||
explain extended select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t2 index NULL PRIMARY 4 NULL 4 100.00 Using where; Using index
|
||||
1 PRIMARY SUBQUERY#2 ALL distinct_key NULL NULL NULL 4 100.00
|
||||
1 PRIMARY t2 index PRIMARY PRIMARY 4 NULL 4 75.00 Using where; Using index; Using join buffer
|
||||
2 SUBQUERY t1 ALL NULL NULL NULL NULL 4 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,`test`.`t2`.`a` in ( <materialize> (select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`b` <> 30) ), <primary_index_lookup>(`test`.`t2`.`a` in <temporary table> on distinct_key where ((`test`.`t2`.`a` = `materialized subselect`.`a`)))))
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from <materialize> (select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`b` <> 30)) join `test`.`t2` where (`test`.`t2`.`a` = `SUBQUERY#2`.`a`)
|
||||
select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
|
||||
a
|
||||
2
|
||||
3
|
||||
explain extended select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t2 index NULL PRIMARY 4 NULL 4 100.00 Using where; Using index
|
||||
1 PRIMARY t2 index PRIMARY PRIMARY 4 NULL 4 100.00 Using index
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 4 test.t2.a 1 100.00
|
||||
2 SUBQUERY t3 index PRIMARY PRIMARY 4 NULL 3 100.00 Using index
|
||||
2 SUBQUERY t1 ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,`test`.`t2`.`a` in ( <materialize> (select `test`.`t1`.`a` AS `a` from `test`.`t1` join `test`.`t3` where (`test`.`t1`.`b` = `test`.`t3`.`a`) ), <primary_index_lookup>(`test`.`t2`.`a` in <temporary table> on distinct_key where ((`test`.`t2`.`a` = `materialized subselect`.`a`)))))
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from <materialize> (select `test`.`t1`.`a` AS `a` from `test`.`t1` join `test`.`t3` where (`test`.`t1`.`b` = `test`.`t3`.`a`)) join `test`.`t2` where (`SUBQUERY#2`.`a` = `test`.`t2`.`a`)
|
||||
drop table t1, t2, t3;
|
||||
create table t1 (a int, b int, index a (a,b));
|
||||
create table t2 (a int, index a (a));
|
||||
@@ -1342,31 +1345,34 @@ a
|
||||
4
|
||||
explain extended select * from t2 where t2.a in (select a from t1);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t2 index NULL a 5 NULL 4 100.00 Using where; Using index
|
||||
1 PRIMARY t2 index a a 5 NULL 4 100.00 Using index
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 5 test.t2.a 1 100.00
|
||||
2 SUBQUERY t1 index NULL a 10 NULL 10004 100.00 Using index
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,`test`.`t2`.`a` in ( <materialize> (select `test`.`t1`.`a` AS `a` from `test`.`t1` ), <primary_index_lookup>(`test`.`t2`.`a` in <temporary table> on distinct_key where ((`test`.`t2`.`a` = `materialized subselect`.`a`)))))
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from <materialize> (select `test`.`t1`.`a` AS `a` from `test`.`t1`) join `test`.`t2` where (`SUBQUERY#2`.`a` = `test`.`t2`.`a`)
|
||||
select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
|
||||
a
|
||||
2
|
||||
4
|
||||
explain extended select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t2 index NULL a 5 NULL 4 100.00 Using where; Using index
|
||||
1 PRIMARY t2 index a a 5 NULL 4 100.00 Using index
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 5 test.t2.a 1 100.00
|
||||
2 SUBQUERY t1 index NULL a 10 NULL 10004 100.00 Using where; Using index
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,`test`.`t2`.`a` in ( <materialize> (select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`b` <> 30) ), <primary_index_lookup>(`test`.`t2`.`a` in <temporary table> on distinct_key where ((`test`.`t2`.`a` = `materialized subselect`.`a`)))))
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from <materialize> (select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`b` <> 30)) join `test`.`t2` where (`SUBQUERY#2`.`a` = `test`.`t2`.`a`)
|
||||
select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
|
||||
a
|
||||
2
|
||||
3
|
||||
explain extended select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t2 index NULL a 5 NULL 4 100.00 Using where; Using index
|
||||
1 PRIMARY t2 index a a 5 NULL 4 100.00 Using index
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 5 test.t2.a 1 100.00
|
||||
2 SUBQUERY t3 index a a 5 NULL 3 100.00 Using index
|
||||
2 SUBQUERY t1 index NULL a 10 NULL 10004 100.00 Using where; Using index; Using join buffer
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,`test`.`t2`.`a` in ( <materialize> (select `test`.`t1`.`a` AS `a` from `test`.`t1` join `test`.`t3` where (`test`.`t1`.`b` = `test`.`t3`.`a`) ), <primary_index_lookup>(`test`.`t2`.`a` in <temporary table> on distinct_key where ((`test`.`t2`.`a` = `materialized subselect`.`a`)))))
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from <materialize> (select `test`.`t1`.`a` AS `a` from `test`.`t1` join `test`.`t3` where (`test`.`t1`.`b` = `test`.`t3`.`a`)) join `test`.`t2` where (`SUBQUERY#2`.`a` = `test`.`t2`.`a`)
|
||||
insert into t1 values (3,31);
|
||||
select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
|
||||
a
|
||||
@@ -1379,10 +1385,11 @@ a
|
||||
4
|
||||
explain extended select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t2 index NULL a 5 NULL 4 100.00 Using where; Using index
|
||||
1 PRIMARY t2 index a a 5 NULL 4 100.00 Using index
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 5 test.t2.a 1 100.00
|
||||
2 SUBQUERY t1 index NULL a 10 NULL 10005 100.00 Using where; Using index
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`a`,`test`.`t2`.`a` in ( <materialize> (select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`b` <> 30) ), <primary_index_lookup>(`test`.`t2`.`a` in <temporary table> on distinct_key where ((`test`.`t2`.`a` = `materialized subselect`.`a`)))))
|
||||
Note 1003 select `test`.`t2`.`a` AS `a` from <materialize> (select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`b` <> 30)) join `test`.`t2` where (`SUBQUERY#2`.`a` = `test`.`t2`.`a`)
|
||||
drop table t0, t1, t2, t3;
|
||||
create table t1 (a int, b int);
|
||||
create table t2 (a int, b int);
|
||||
@@ -2833,10 +2840,11 @@ Warnings:
|
||||
Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two`,<in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where ((`test`.`t2`.`flag` = '0') and trigcond(((<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) or isnull(`test`.`t2`.`one`))) and trigcond(((<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`) or isnull(`test`.`t2`.`two`)))) having (trigcond(<is_not_null_test>(`test`.`t2`.`one`)) and trigcond(<is_not_null_test>(`test`.`t2`.`two`))))) AS `test` from `test`.`t1`
|
||||
explain extended SELECT one,two from t1 where ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = 'N');
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 8 100.00 Using where
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 8 100.00
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 10 test.t1.one,test.t1.two 1 100.00
|
||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 9 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two` from `test`.`t1` where <in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),(`test`.`t1`.`one`,`test`.`t1`.`two`) in ( <materialize> (select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where (`test`.`t2`.`flag` = 'N') ), <primary_index_lookup>(`test`.`t1`.`one` in <temporary table> on distinct_key where ((`test`.`t1`.`one` = `materialized subselect`.`one`) and (`test`.`t1`.`two` = `materialized subselect`.`two`)))))
|
||||
Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two` from <materialize> (select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where (`test`.`t2`.`flag` = 'N')) join `test`.`t1` where ((`SUBQUERY#2`.`two` = `test`.`t1`.`two`) and (`SUBQUERY#2`.`one` = `test`.`t1`.`one`))
|
||||
explain extended SELECT one,two,ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = '0' group by one,two) as 'test' from t1;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 8 100.00
|
||||
@@ -3421,7 +3429,8 @@ AAA 8
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 9 Using where
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 9
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 23 test.t1.a,test.t1.b 1
|
||||
2 SUBQUERY t1 ALL NULL NULL NULL NULL 9 Using temporary; Using filesort
|
||||
ALTER TABLE t1 ADD INDEX(a);
|
||||
SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
|
||||
@@ -3432,7 +3441,8 @@ AAA 8
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 9 Using where
|
||||
1 PRIMARY t1 ALL a NULL NULL NULL 9
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 23 test.t1.a,test.t1.b 1
|
||||
2 SUBQUERY t1 ALL NULL NULL NULL NULL 9 Using temporary; Using filesort
|
||||
DROP TABLE t1;
|
||||
create table t1( f1 int,f2 int);
|
||||
@@ -4206,7 +4216,8 @@ CREATE INDEX I1 ON t1 (a);
|
||||
CREATE INDEX I2 ON t1 (b);
|
||||
EXPLAIN SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 Using where
|
||||
1 PRIMARY t1 ALL I2 NULL NULL NULL 2
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 2 test.t1.b 1 Using where
|
||||
2 SUBQUERY t1 index NULL I1 2 NULL 2 Using index
|
||||
SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1);
|
||||
a b
|
||||
@@ -4216,14 +4227,16 @@ CREATE INDEX I1 ON t2 (a);
|
||||
CREATE INDEX I2 ON t2 (b);
|
||||
EXPLAIN SELECT a,b FROM t2 WHERE b IN (SELECT a FROM t2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2 Using where
|
||||
1 PRIMARY t2 ALL I2 NULL NULL NULL 2
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 5 test.t2.b 1 Using where
|
||||
2 SUBQUERY t2 index NULL I1 4 NULL 2 Using index
|
||||
SELECT a,b FROM t2 WHERE b IN (SELECT a FROM t2);
|
||||
a b
|
||||
EXPLAIN
|
||||
SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1 WHERE LENGTH(a)<500);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 Using where
|
||||
1 PRIMARY t1 ALL I2 NULL NULL NULL 2
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 2 test.t1.b 1 Using where
|
||||
2 SUBQUERY t1 index NULL I1 2 NULL 2 Using where; Using index
|
||||
SELECT a,b FROM t1 WHERE b IN (SELECT a FROM t1 WHERE LENGTH(a)<500);
|
||||
a b
|
||||
@@ -4326,16 +4339,18 @@ CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
EXPLAIN EXTENDED SELECT 1 FROM t1 WHERE 1 IN (SELECT 1 FROM t1 GROUP BY a);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
1 PRIMARY SUBQUERY#2 const distinct_key distinct_key 4 const 1 100.00
|
||||
2 SUBQUERY t1 ALL NULL NULL NULL NULL 2 100.00 Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1003 select 1 AS `1` from `test`.`t1` where <in_optimizer>(1,1 in ( <materialize> (select 1 AS `1` from `test`.`t1` group by `test`.`t1`.`a` ), <primary_index_lookup>(1 in <temporary table> on distinct_key where ((1 = `materialized subselect`.`1`)))))
|
||||
Note 1003 select 1 AS `1` from <materialize> (select 1 AS `1` from `test`.`t1` group by `test`.`t1`.`a`) join `test`.`t1` where (`SUBQUERY#2`.`1` = 1)
|
||||
EXPLAIN EXTENDED SELECT 1 FROM t1 WHERE 1 IN (SELECT 1 FROM t1 WHERE a > 3 GROUP BY a);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
1 PRIMARY SUBQUERY#2 const distinct_key distinct_key 4 const 1 100.00
|
||||
2 SUBQUERY t1 ALL NULL NULL NULL NULL 2 100.00 Using where; Using temporary; Using filesort
|
||||
Warnings:
|
||||
Note 1003 select 1 AS `1` from `test`.`t1` where <in_optimizer>(1,1 in ( <materialize> (select 1 AS `1` from `test`.`t1` where (`test`.`t1`.`a` > 3) group by `test`.`t1`.`a` ), <primary_index_lookup>(1 in <temporary table> on distinct_key where ((1 = `materialized subselect`.`1`)))))
|
||||
Note 1003 select 1 AS `1` from <materialize> (select 1 AS `1` from `test`.`t1` where (`test`.`t1`.`a` > 3) group by `test`.`t1`.`a`) join `test`.`t1` where (`SUBQUERY#2`.`1` = 1)
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#45061: Incorrectly market field caused wrong result.
|
||||
|
@@ -848,7 +848,7 @@ INSERT INTO t2 VALUES (1,'i','iiii','iiii','iiii','iiii','ffff','ffff','ffff','f
|
||||
EXPLAIN EXTENDED SELECT pk FROM t1 WHERE (a, b) IN (SELECT a, b FROM t2 WHERE pk > 0);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 13 func 1 1.00
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 13 func 1 1.00
|
||||
2 SUBQUERY t2 range PRIMARY PRIMARY 4 NULL 2 100.00 Using index condition; Using MRR
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t2`.`pk` > 0))
|
||||
@@ -1017,7 +1017,7 @@ FROM t1
|
||||
WHERE `varchar_nokey` < 'n' XOR `pk` ) ;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 18 100.00
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 8 func 1 1.00
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 8 func 1 1.00
|
||||
2 SUBQUERY t1 ALL varchar_key NULL NULL NULL 15 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`varchar_nokey` AS `varchar_nokey` from `test`.`t2` semi join (`test`.`t1`) where ((`test`.`t1`.`varchar_nokey` = `test`.`t1`.`varchar_key`) and ((`test`.`t1`.`varchar_nokey` < 'n') xor `test`.`t1`.`pk`))
|
||||
|
@@ -32,7 +32,7 @@ a b
|
||||
9 5
|
||||
explain select * from t2 where b in (select a from t1);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY subselect2 ALL unique_key NULL NULL NULL 3
|
||||
1 PRIMARY SUBQUERY#2 ALL unique_key NULL NULL NULL 3
|
||||
1 PRIMARY t2 ref b b 5 test.t1.a 2
|
||||
2 SUBQUERY t1 ALL NULL NULL NULL NULL 3
|
||||
select * from t2 where b in (select a from t1);
|
||||
@@ -74,7 +74,7 @@ A.a + 10*B.a, A.a + 10*B.a, A.a + 10*B.a, A.a + 10*B.a
|
||||
from t0 A, t0 B where B.a <5;
|
||||
explain select * from t3 where b in (select a from t0);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY subselect2 ALL unique_key NULL NULL NULL 10
|
||||
1 PRIMARY SUBQUERY#2 ALL unique_key NULL NULL NULL 10
|
||||
1 PRIMARY t3 ref b b 5 test.t0.a 1
|
||||
2 SUBQUERY t0 ALL NULL NULL NULL NULL 10
|
||||
set @save_ecp= @@engine_condition_pushdown;
|
||||
@@ -101,7 +101,7 @@ set max_heap_table_size= @save_max_heap_table_size;
|
||||
explain select * from t1 where a in (select b from t2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 5 func 1
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 5 func 1
|
||||
2 SUBQUERY t2 index b b 5 NULL 10 Using index
|
||||
select * from t1;
|
||||
a b
|
||||
@@ -129,7 +129,7 @@ explain select
|
||||
a, mid(filler1, 1,10), length(filler1)=length(filler2) as Z
|
||||
from t1 ot where a in (select a from t2 it);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY subselect2 ALL unique_key NULL NULL NULL 22
|
||||
1 PRIMARY SUBQUERY#2 ALL unique_key NULL NULL NULL 22
|
||||
1 PRIMARY ot ALL NULL NULL NULL NULL 32 Using where; Using join buffer
|
||||
2 SUBQUERY it ALL NULL NULL NULL NULL 22
|
||||
select
|
||||
@@ -163,7 +163,7 @@ a, mid(filler1, 1,10), length(filler1)=length(filler2)
|
||||
from t2 ot where a in (select a from t1 it);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY ot ALL NULL NULL NULL NULL 22
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 5 func 1
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 5 func 1
|
||||
2 SUBQUERY it ALL NULL NULL NULL NULL 32
|
||||
select
|
||||
a, mid(filler1, 1,10), length(filler1)=length(filler2)
|
||||
@@ -197,7 +197,7 @@ explain select
|
||||
a, mid(filler1, 1,10), length(filler1)=length(filler2) as Z
|
||||
from t1 ot where a in (select a from t2 it);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY subselect2 ALL unique_key NULL NULL NULL 22
|
||||
1 PRIMARY SUBQUERY#2 ALL unique_key NULL NULL NULL 22
|
||||
1 PRIMARY ot ALL NULL NULL NULL NULL 52 Using where; Using join buffer
|
||||
2 SUBQUERY it ALL NULL NULL NULL NULL 22
|
||||
select
|
||||
@@ -231,7 +231,7 @@ a, mid(filler1, 1,10), length(filler1)=length(filler2)
|
||||
from t2 ot where a in (select a from t1 it);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY ot ALL NULL NULL NULL NULL 22
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 5 func 1
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 5 func 1
|
||||
2 SUBQUERY it ALL NULL NULL NULL NULL 52
|
||||
select
|
||||
a, mid(filler1, 1,10), length(filler1)=length(filler2)
|
||||
@@ -348,7 +348,7 @@ WHERE t1.Code IN (
|
||||
SELECT t2.CountryCode FROM t2 WHERE Population > 5000000);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL PRIMARY NULL NULL NULL 31
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 3 func 1
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 3 func 1
|
||||
2 SUBQUERY t2 ALL CountryCode NULL NULL NULL 545 Using where
|
||||
SELECT Name FROM t1
|
||||
WHERE t1.Code IN (
|
||||
@@ -359,6 +359,10 @@ Canada
|
||||
China
|
||||
Czech Republic
|
||||
drop table t1, t2;
|
||||
drop procedure if exists p1;
|
||||
drop procedure if exists p2;
|
||||
drop procedure if exists p3;
|
||||
drop procedure if exists p4;
|
||||
CREATE TABLE t1(a INT);
|
||||
CREATE TABLE t2(c INT);
|
||||
CREATE PROCEDURE p1(v1 int)
|
||||
@@ -692,7 +696,7 @@ The following must use loose index scan over t3, key a:
|
||||
explain select count(a) from t2 where a in ( SELECT a FROM t3);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 index a a 5 NULL 1000 Using index
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 5 func 1
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 5 func 1
|
||||
2 SUBQUERY t3 index a a 5 NULL 30000 Using index
|
||||
select count(a) from t2 where a in ( SELECT a FROM t3);
|
||||
count(a)
|
||||
|
@@ -36,7 +36,7 @@ a b
|
||||
9 5
|
||||
explain select * from t2 where b in (select a from t1);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY subselect2 ALL unique_key NULL NULL NULL 3
|
||||
1 PRIMARY SUBQUERY#2 ALL unique_key NULL NULL NULL 3
|
||||
1 PRIMARY t2 ref b b 5 test.t1.a 2 Using join buffer
|
||||
2 SUBQUERY t1 ALL NULL NULL NULL NULL 3
|
||||
select * from t2 where b in (select a from t1);
|
||||
@@ -78,7 +78,7 @@ A.a + 10*B.a, A.a + 10*B.a, A.a + 10*B.a, A.a + 10*B.a
|
||||
from t0 A, t0 B where B.a <5;
|
||||
explain select * from t3 where b in (select a from t0);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY subselect2 ALL unique_key NULL NULL NULL 10
|
||||
1 PRIMARY SUBQUERY#2 ALL unique_key NULL NULL NULL 10
|
||||
1 PRIMARY t3 ref b b 5 test.t0.a 1 Using join buffer
|
||||
2 SUBQUERY t0 ALL NULL NULL NULL NULL 10
|
||||
set @save_ecp= @@engine_condition_pushdown;
|
||||
@@ -105,7 +105,7 @@ set max_heap_table_size= @save_max_heap_table_size;
|
||||
explain select * from t1 where a in (select b from t2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 5 func 1
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 5 func 1
|
||||
2 SUBQUERY t2 index b b 5 NULL 10 Using index
|
||||
select * from t1;
|
||||
a b
|
||||
@@ -133,7 +133,7 @@ explain select
|
||||
a, mid(filler1, 1,10), length(filler1)=length(filler2) as Z
|
||||
from t1 ot where a in (select a from t2 it);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY subselect2 ALL unique_key NULL NULL NULL 22
|
||||
1 PRIMARY SUBQUERY#2 ALL unique_key NULL NULL NULL 22
|
||||
1 PRIMARY ot ALL NULL NULL NULL NULL 32 Using where; Using join buffer
|
||||
2 SUBQUERY it ALL NULL NULL NULL NULL 22
|
||||
select
|
||||
@@ -167,7 +167,7 @@ a, mid(filler1, 1,10), length(filler1)=length(filler2)
|
||||
from t2 ot where a in (select a from t1 it);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY ot ALL NULL NULL NULL NULL 22
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 5 func 1
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 5 func 1
|
||||
2 SUBQUERY it ALL NULL NULL NULL NULL 32
|
||||
select
|
||||
a, mid(filler1, 1,10), length(filler1)=length(filler2)
|
||||
@@ -201,7 +201,7 @@ explain select
|
||||
a, mid(filler1, 1,10), length(filler1)=length(filler2) as Z
|
||||
from t1 ot where a in (select a from t2 it);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY subselect2 ALL unique_key NULL NULL NULL 22
|
||||
1 PRIMARY SUBQUERY#2 ALL unique_key NULL NULL NULL 22
|
||||
1 PRIMARY ot ALL NULL NULL NULL NULL 52 Using where; Using join buffer
|
||||
2 SUBQUERY it ALL NULL NULL NULL NULL 22
|
||||
select
|
||||
@@ -235,7 +235,7 @@ a, mid(filler1, 1,10), length(filler1)=length(filler2)
|
||||
from t2 ot where a in (select a from t1 it);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY ot ALL NULL NULL NULL NULL 22
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 5 func 1
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 5 func 1
|
||||
2 SUBQUERY it ALL NULL NULL NULL NULL 52
|
||||
select
|
||||
a, mid(filler1, 1,10), length(filler1)=length(filler2)
|
||||
@@ -352,7 +352,7 @@ WHERE t1.Code IN (
|
||||
SELECT t2.CountryCode FROM t2 WHERE Population > 5000000);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL PRIMARY NULL NULL NULL 31
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 3 func 1
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 3 func 1
|
||||
2 SUBQUERY t2 ALL CountryCode NULL NULL NULL 545 Using where
|
||||
SELECT Name FROM t1
|
||||
WHERE t1.Code IN (
|
||||
@@ -363,6 +363,10 @@ Canada
|
||||
China
|
||||
Czech Republic
|
||||
drop table t1, t2;
|
||||
drop procedure if exists p1;
|
||||
drop procedure if exists p2;
|
||||
drop procedure if exists p3;
|
||||
drop procedure if exists p4;
|
||||
CREATE TABLE t1(a INT);
|
||||
CREATE TABLE t2(c INT);
|
||||
CREATE PROCEDURE p1(v1 int)
|
||||
@@ -698,7 +702,7 @@ The following must use loose index scan over t3, key a:
|
||||
explain select count(a) from t2 where a in ( SELECT a FROM t3);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 index a a 5 NULL 1000 Using index
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 5 func 1
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 5 func 1
|
||||
2 SUBQUERY t3 index a a 5 NULL 30000 Using index
|
||||
select count(a) from t2 where a in ( SELECT a FROM t3);
|
||||
count(a)
|
||||
|
@@ -852,7 +852,7 @@ INSERT INTO t2 VALUES (1,'i','iiii','iiii','iiii','iiii','ffff','ffff','ffff','f
|
||||
EXPLAIN EXTENDED SELECT pk FROM t1 WHERE (a, b) IN (SELECT a, b FROM t2 WHERE pk > 0);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 13 func 1 1.00
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 13 func 1 1.00
|
||||
2 SUBQUERY t2 range PRIMARY PRIMARY 4 NULL 2 100.00 Using index condition; Using MRR
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t2`.`pk` > 0))
|
||||
@@ -1021,7 +1021,7 @@ FROM t1
|
||||
WHERE `varchar_nokey` < 'n' XOR `pk` ) ;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 18 100.00
|
||||
1 PRIMARY subselect2 eq_ref unique_key unique_key 8 func 1 1.00
|
||||
1 PRIMARY SUBQUERY#2 eq_ref unique_key unique_key 8 func 1 1.00
|
||||
2 SUBQUERY t1 ALL varchar_key NULL NULL NULL 15 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`varchar_nokey` AS `varchar_nokey` from `test`.`t2` semi join (`test`.`t1`) where ((`test`.`t1`.`varchar_nokey` = `test`.`t1`.`varchar_key`) and ((`test`.`t1`.`varchar_nokey` < 'n') xor `test`.`t1`.`pk`))
|
||||
|
@@ -303,7 +303,7 @@ a+1
|
||||
explain select * from v1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 2
|
||||
2 DERIVED t1 ALL NULL NULL NULL NULL 4 Using filesort
|
||||
2 DERIVED t1 ALL NULL NULL NULL NULL 2 Using filesort
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
create table t1 (a int);
|
||||
|
@@ -141,7 +141,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part1 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 part1 ALL NULL NULL NULL NULL 7 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -165,7 +165,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 5 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -190,7 +190,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 3 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -226,7 +226,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p6 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 p6 ALL NULL NULL NULL NULL 3 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -248,7 +248,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p4 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 p4 ALL NULL NULL NULL NULL 4 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -269,7 +269,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 4 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -289,7 +289,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 5 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -308,7 +308,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part1 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 part1 ALL NULL NULL NULL NULL 7 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -326,7 +326,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 10 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -452,7 +452,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 7 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -476,7 +476,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 5 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -504,7 +504,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p6 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 p6 ALL NULL NULL NULL NULL 3 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -538,7 +538,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 4 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -563,7 +563,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 3 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -587,7 +587,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p4 ALL NULL NULL NULL NULL 23 Using where
|
||||
1 SIMPLE t1 p4 ALL NULL NULL NULL NULL 10 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -610,7 +610,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 5 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -632,7 +632,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 7 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -653,7 +653,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 10 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
|
@@ -155,7 +155,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part1 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 part1 ALL NULL NULL NULL NULL 7 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -187,7 +187,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 5 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -228,7 +228,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 3 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -278,7 +278,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p6 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 p6 ALL NULL NULL NULL NULL 3 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -312,7 +312,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p4 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 p4 ALL NULL NULL NULL NULL 4 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -343,7 +343,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 4 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -371,7 +371,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 5 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -396,7 +396,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part1 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 part1 ALL NULL NULL NULL NULL 7 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -418,7 +418,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 WHERE f_date = '1000-02-10';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 10 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -552,7 +552,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 7 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -584,7 +584,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 5 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -628,7 +628,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p6 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 p6 ALL NULL NULL NULL NULL 3 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -676,7 +676,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 4 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -713,7 +713,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 3 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -747,7 +747,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p4 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 p4 ALL NULL NULL NULL NULL 10 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -778,7 +778,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 5 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -806,7 +806,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 part7 ALL NULL NULL NULL NULL 7 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
@@ -831,7 +831,7 @@ t1.frm
|
||||
t1.par
|
||||
EXPLAIN PARTITIONS SELECT COUNT(*) <> 1 FROM t1 WHERE f_int1 = 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 10 Using where
|
||||
# check read single success: 1
|
||||
# check read all success: 1
|
||||
# check read row by row success: 1
|
||||
|
@@ -2256,7 +2256,8 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
EXPLAIN SELECT 1 FROM t1 AS t1_outer WHERE
|
||||
a IN (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1_outer index NULL a 10 NULL 15 Using where; Using index
|
||||
1 PRIMARY SUBQUERY#2 ALL distinct_key NULL NULL NULL 15
|
||||
1 PRIMARY t1_outer ref a a 5 SUBQUERY#2.max(b) 1 Using index
|
||||
2 SUBQUERY t1 index NULL a 10 NULL 15 Using index
|
||||
EXPLAIN SELECT 1 FROM t1 AS t1_outer GROUP BY a HAVING
|
||||
a > (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2);
|
||||
|
@@ -55,7 +55,7 @@ id data data
|
||||
2 female no
|
||||
select t1.id from t1 union select t2.id from t2;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def id id 1 4 1 Y 32768 0 63
|
||||
def id id 1 4 1 Y 49152 0 63
|
||||
id
|
||||
1
|
||||
2
|
||||
@@ -66,7 +66,7 @@ insert into t1 values (2,'two');
|
||||
set @arg00=1 ;
|
||||
select @arg00 FROM t1 where a=1 union distinct select 1 FROM t1 where a=1;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def @arg00 @arg00 8 20 1 Y 32768 0 63
|
||||
def @arg00 @arg00 8 20 1 Y 49152 0 63
|
||||
@arg00
|
||||
1
|
||||
select * from (select @arg00) aaa;
|
||||
@@ -76,7 +76,7 @@ def aaa @arg00 @arg00 8 20 1 Y 32768 0 63
|
||||
1
|
||||
select 1 union select 1;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def 1 1 8 20 1 N 32769 0 63
|
||||
def 1 1 8 20 1 N 49153 0 63
|
||||
1
|
||||
1
|
||||
select * from (select 1 union select 1) aaa;
|
||||
|
@@ -57,25 +57,25 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0,p1,p2,p3 ALL NULL NULL NULL NULL 9 Using where
|
||||
explain partitions select * from t1 where a is null or (a >= 5 and a <= 7);
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0,p2,p3 ALL NULL NULL NULL NULL 9 Using where
|
||||
1 SIMPLE t1 p0,p2,p3 ALL NULL NULL NULL NULL 7 Using where
|
||||
explain partitions select * from t1 where a is null;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 9 Using where
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 3 Using where
|
||||
explain partitions select * from t1 where a is not null;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0,p1,p2,p3 ALL NULL NULL NULL NULL 9 Using where
|
||||
explain partitions select * from t1 where a >= 1 and a < 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0,p1 ALL NULL NULL NULL NULL 9 Using where
|
||||
1 SIMPLE t1 p0,p1 ALL NULL NULL NULL NULL 5 Using where
|
||||
explain partitions select * from t1 where a >= 3 and a <= 5;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p1,p2 ALL NULL NULL NULL NULL 9 Using where
|
||||
1 SIMPLE t1 p1,p2 ALL NULL NULL NULL NULL 4 Using where
|
||||
explain partitions select * from t1 where a > 2 and a < 4;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p1 ALL NULL NULL NULL NULL 9 Using where
|
||||
1 SIMPLE t1 p1 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a > 3 and a <= 6;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p2,p3 ALL NULL NULL NULL NULL 9 Using where
|
||||
1 SIMPLE t1 p2,p3 ALL NULL NULL NULL NULL 4 Using where
|
||||
explain partitions select * from t1 where a > 5;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0,p1,p2,p3 ALL NULL NULL NULL NULL 9 Using where
|
||||
|
@@ -14,7 +14,7 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p1 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a=2;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a=1 or a=2;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0,p1 ALL NULL NULL NULL NULL 3 Using where
|
||||
@@ -31,7 +31,7 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p0,p1 ALL NULL NULL NULL NULL 3 Using where
|
||||
explain partitions select * from t2 where a=1 and b=1;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p0 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t2 p0 ALL NULL NULL NULL NULL 2 Using where
|
||||
create table t3 (
|
||||
a int
|
||||
)
|
||||
@@ -42,16 +42,16 @@ partition p1 values less than (20)
|
||||
insert into t3 values (5),(15);
|
||||
explain partitions select * from t3 where a=11;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t3 p1 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t3 p1 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t3 where a=10;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t3 p1 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t3 p1 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t3 where a=20;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 0 Using where
|
||||
explain partitions select * from t3 where a=30;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 0 Using where
|
||||
create table t4 (a int not null, b int not null) partition by LIST (a+b) (
|
||||
partition p0 values in (12),
|
||||
partition p1 values in (14)
|
||||
@@ -59,11 +59,11 @@ partition p1 values in (14)
|
||||
insert into t4 values (10,2), (10,4);
|
||||
explain partitions select * from t4 where (a=10 and b=1) or (a=10 and b=2);
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t4 p0 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t4 p0 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t4
|
||||
where (a=10 and b=1) or (a=10 and b=2) or (a=10 and b = 3);
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t4 p0 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t4 p0 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t4 where (a=10 and b=2) or (a=10 and b=3)
|
||||
or (a=10 and b = 4);
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
@@ -89,25 +89,25 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
explain partitions select * from t5
|
||||
where (a=10 and b=1) or (a=10 and b=2) or (a=10 and b = 3);
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t5 p0_p0sp0,p0_p0sp1 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t5 p0_p0sp0,p0_p0sp1 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t5 where (a=10 and b=2) or (a=10 and b=3)
|
||||
or (a=10 and b = 4);
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t5 p0_p0sp0,p0_p0sp1,p1_p1sp0,p1_p1sp1 ALL NULL NULL NULL NULL 4 Using where
|
||||
explain partitions select * from t5 where (c=1 and d=1);
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t5 p0_p0sp0,p1_p1sp0 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t5 p0_p0sp0,p1_p1sp0 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t5 where (c=2 and d=1);
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t5 p0_p0sp1,p1_p1sp1 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t5 p0_p0sp1,p1_p1sp1 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t5 where (a=10 and b=2 and c=1 and d=1) or
|
||||
(c=2 and d=1);
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t5 p0_p0sp0,p0_p0sp1,p1_p1sp1 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t5 p0_p0sp0,p0_p0sp1,p1_p1sp1 ALL NULL NULL NULL NULL 3 Using where
|
||||
explain partitions select * from t5 where (a=10 and b=2 and c=1 and d=1) or
|
||||
(b=2 and c=2 and d=1);
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t5 p0_p0sp0,p0_p0sp1,p1_p1sp1 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t5 p0_p0sp0,p0_p0sp1,p1_p1sp1 ALL NULL NULL NULL NULL 3 Using where
|
||||
create table t6 (a int not null) partition by LIST(a) (
|
||||
partition p1 values in (1),
|
||||
partition p3 values in (3),
|
||||
@@ -121,34 +121,34 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 0 Using where
|
||||
explain partitions select * from t6 where a <= 1;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6 p1 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t6 p1 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t6 where a > 9;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 0 Using where
|
||||
explain partitions select * from t6 where a >= 9;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6 p9 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t6 p9 ALL NULL NULL NULL NULL 0 Using where
|
||||
explain partitions select * from t6 where a > 0 and a < 5;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6 p1,p3 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t6 where a > 5 and a < 12;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6 p7,p9 ALL NULL NULL NULL NULL 2 Using where
|
||||
1 SIMPLE t6 p7,p9 ALL NULL NULL NULL NULL 0 Using where
|
||||
explain partitions select * from t6 where a > 3 and a < 8 ;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6 p5,p7 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t6 p5,p7 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t6 where a >= 0 and a <= 5;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6 p1,p3,p5 ALL NULL NULL NULL NULL 3 Using where
|
||||
explain partitions select * from t6 where a >= 5 and a <= 12;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6 p5,p7,p9 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t6 p5,p7,p9 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t6 where a >= 3 and a <= 8;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6 p3,p5,p7 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t6 p3,p5,p7 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t6 where a > 3 and a < 5;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 0 Using where
|
||||
drop table t6;
|
||||
create table t6 (a int unsigned not null) partition by LIST(a) (
|
||||
partition p1 values in (1),
|
||||
@@ -163,34 +163,34 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 0 Using where
|
||||
explain partitions select * from t6 where a <= 1;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6 p1 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t6 p1 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t6 where a > 9;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 0 Using where
|
||||
explain partitions select * from t6 where a >= 9;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6 p9 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t6 p9 ALL NULL NULL NULL NULL 0 Using where
|
||||
explain partitions select * from t6 where a > 0 and a < 5;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6 p1,p3 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t6 where a > 5 and a < 12;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6 p7,p9 ALL NULL NULL NULL NULL 2 Using where
|
||||
1 SIMPLE t6 p7,p9 ALL NULL NULL NULL NULL 0 Using where
|
||||
explain partitions select * from t6 where a > 3 and a < 8 ;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6 p5,p7 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t6 p5,p7 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t6 where a >= 0 and a <= 5;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6 p1,p3,p5 ALL NULL NULL NULL NULL 3 Using where
|
||||
explain partitions select * from t6 where a >= 5 and a <= 12;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6 p5,p7,p9 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t6 p5,p7,p9 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t6 where a >= 3 and a <= 8;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6 p3,p5,p7 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t6 p3,p5,p7 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t6 where a > 3 and a < 5;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 0 Using where
|
||||
create table t7 (a int not null) partition by RANGE(a) (
|
||||
partition p10 values less than (10),
|
||||
partition p30 values less than (30),
|
||||
@@ -207,25 +207,25 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t7 p10 ALL NULL NULL NULL NULL 0 Using where
|
||||
explain partitions select * from t7 where a <= 10;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t7 p10,p30 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t7 p10,p30 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t7 where a = 10;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t7 p30 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t7 p30 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t7 where a < 90;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t7 p10,p30,p50,p70,p90 ALL NULL NULL NULL NULL 3 Using where
|
||||
explain partitions select * from t7 where a = 90;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t7 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t7 ALL NULL NULL NULL NULL 0 Using where
|
||||
explain partitions select * from t7 where a > 90;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t7 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t7 ALL NULL NULL NULL NULL 0 Using where
|
||||
explain partitions select * from t7 where a >= 90;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t7 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t7 ALL NULL NULL NULL NULL 0 Using where
|
||||
explain partitions select * from t7 where a > 11 and a < 29;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t7 p30 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t7 p30 ALL NULL NULL NULL NULL 2 Using where
|
||||
drop table t7;
|
||||
create table t7 (a int unsigned not null) partition by RANGE(a) (
|
||||
partition p10 values less than (10),
|
||||
@@ -243,25 +243,25 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t7 p10 ALL NULL NULL NULL NULL 0 Using where
|
||||
explain partitions select * from t7 where a <= 10;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t7 p10,p30 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t7 p10,p30 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t7 where a = 10;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t7 p30 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t7 p30 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t7 where a < 90;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t7 p10,p30,p50,p70,p90 ALL NULL NULL NULL NULL 3 Using where
|
||||
explain partitions select * from t7 where a = 90;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t7 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t7 ALL NULL NULL NULL NULL 0 Using where
|
||||
explain partitions select * from t7 where a > 90;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t7 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t7 ALL NULL NULL NULL NULL 0 Using where
|
||||
explain partitions select * from t7 where a >= 90;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t7 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t7 ALL NULL NULL NULL NULL 0 Using where
|
||||
explain partitions select * from t7 where a > 11 and a < 29;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t7 p30 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t7 p30 ALL NULL NULL NULL NULL 2 Using where
|
||||
create table t8 (a date not null) partition by RANGE(YEAR(a)) (
|
||||
partition p0 values less than (1980),
|
||||
partition p1 values less than (1990),
|
||||
@@ -270,7 +270,7 @@ partition p2 values less than (2000)
|
||||
insert into t8 values ('1985-05-05'),('1995-05-05');
|
||||
explain partitions select * from t8 where a < '1980-02-02';
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t8 p0,p1 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t8 p0,p1 ALL NULL NULL NULL NULL 2 Using where
|
||||
create table t9 (a date not null) partition by RANGE(TO_DAYS(a)) (
|
||||
partition p0 values less than (732299), -- 2004-12-19
|
||||
partition p1 values less than (732468), -- 2005-06-06
|
||||
@@ -295,13 +295,13 @@ partition p2 values less than (9)
|
||||
insert into t1 values (1),(2),(3);
|
||||
explain partitions select * from t1 where a1 > 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p1,p2 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t1 p1,p2 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a1 >= 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p1,p2 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t1 p1,p2 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a1 < 3 and a1 > 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 0 Using where
|
||||
drop table t1;
|
||||
create table t3 (a int, b int)
|
||||
partition by list(a) subpartition by hash(b) subpartitions 4 (
|
||||
@@ -325,7 +325,7 @@ create table t1 (a int) partition by hash(a) partitions 2;
|
||||
insert into t1 values (1),(2);
|
||||
explain partitions select * from t1 where a is null;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a is not null;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0,p1 ALL NULL NULL NULL NULL 2 Using where
|
||||
@@ -342,20 +342,20 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
explain partitions
|
||||
select * from t1 X, t1 Y where X.a = Y.a and (X.a=1 or X.a=2);
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE X p1,p2 ALL a NULL NULL NULL 4 Using where
|
||||
1 SIMPLE X p1,p2 ALL a NULL NULL NULL 2 Using where
|
||||
1 SIMPLE Y p1,p2 ref a a 4 test.X.a 1
|
||||
drop table t1;
|
||||
create table t1 (a int) partition by hash(a) partitions 20;
|
||||
insert into t1 values (1),(2),(3);
|
||||
explain partitions select * from t1 where a > 1 and a < 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p2 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t1 p2 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a >= 1 and a < 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p1,p2 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a > 1 and a <= 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p2,p3 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t1 p2,p3 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a >= 1 and a <= 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p1,p2,p3 ALL NULL NULL NULL NULL 3 Using where
|
||||
@@ -371,10 +371,10 @@ partition p3 values in (3)
|
||||
insert into t1 values (1,1),(2,2),(3,3);
|
||||
explain partitions select * from t1 where b > 1 and b < 3;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0_p0sp2,p1_p1sp2,p2_p2sp2,p3_p3sp2 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t1 p0_p0sp2,p1_p1sp2,p2_p2sp2,p3_p3sp2 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where b > 1 and b < 3 and (a =1 or a =2);
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p1_p1sp2,p2_p2sp2 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t1 p1_p1sp2,p2_p2sp2 ALL NULL NULL NULL NULL 2 Using where
|
||||
drop table t1;
|
||||
create table t1 (a int) partition by list(a) (
|
||||
partition p0 values in (1,2),
|
||||
@@ -445,22 +445,22 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p0,p1,p2,p3,p4 ALL NULL NULL NULL NULL 1010
|
||||
explain partitions select * from t2 where a < 801 and a > 200;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p1,p2,p3,p4 ALL NULL NULL NULL NULL 1010 Using where
|
||||
1 SIMPLE t2 p1,p2,p3,p4 ALL NULL NULL NULL NULL 800 Using where
|
||||
explain partitions select * from t2 where a < 801 and a > 800;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p4 ALL NULL NULL NULL NULL 1010 Using where
|
||||
1 SIMPLE t2 p4 ALL NULL NULL NULL NULL 200 Using where
|
||||
explain partitions select * from t2 where a > 600;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p3,p4 ALL NULL NULL NULL NULL 1010 Using where
|
||||
1 SIMPLE t2 p3,p4 ALL NULL NULL NULL NULL 400 Using where
|
||||
explain partitions select * from t2 where a > 600 and b = 1;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p3,p4 ALL NULL NULL NULL NULL 1010 Using where
|
||||
1 SIMPLE t2 p3,p4 ALL NULL NULL NULL NULL 400 Using where
|
||||
explain partitions select * from t2 where a > 600 and b = 4;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p3,p4 ALL NULL NULL NULL NULL 1010 Using where
|
||||
1 SIMPLE t2 p3,p4 ALL NULL NULL NULL NULL 400 Using where
|
||||
explain partitions select * from t2 where a > 600 and b = 5;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p3,p4 ALL NULL NULL NULL NULL 1010 Using where
|
||||
1 SIMPLE t2 p3,p4 ALL NULL NULL NULL NULL 400 Using where
|
||||
explain partitions select * from t2 where b = 5;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p0,p1,p2,p3,p4 ALL NULL NULL NULL NULL 1010 Using where
|
||||
@@ -515,19 +515,19 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p0,p1,p2,p3,p4 ALL NULL NULL NULL NULL 910
|
||||
explain partitions select * from t2 where a = 101;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p0 ALL NULL NULL NULL NULL 910 Using where
|
||||
1 SIMPLE t2 p0 ALL NULL NULL NULL NULL 110 Using where
|
||||
explain partitions select * from t2 where a = 550;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p2 ALL NULL NULL NULL NULL 910 Using where
|
||||
1 SIMPLE t2 p2 ALL NULL NULL NULL NULL 200 Using where
|
||||
explain partitions select * from t2 where a = 833;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p4 ALL NULL NULL NULL NULL 910 Using where
|
||||
1 SIMPLE t2 p4 ALL NULL NULL NULL NULL 200 Using where
|
||||
explain partitions select * from t2 where (a = 100 OR a = 900);
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p0,p4 ALL NULL NULL NULL NULL 910 Using where
|
||||
1 SIMPLE t2 p0,p4 ALL NULL NULL NULL NULL 310 Using where
|
||||
explain partitions select * from t2 where (a > 100 AND a < 600);
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p0,p1,p2 ALL NULL NULL NULL NULL 910 Using where
|
||||
1 SIMPLE t2 p0,p1,p2 ALL NULL NULL NULL NULL 510 Using where
|
||||
analyze table t2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t2 analyze status OK
|
||||
@@ -692,7 +692,7 @@ f_int1
|
||||
NULL
|
||||
explain partitions select * from t1 where f_int1 is null;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 part4_part4sp0 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t1 part4_part4sp0 ALL NULL NULL NULL NULL 2 Using where
|
||||
drop table t1;
|
||||
create table t1 (a int not null, b int not null)
|
||||
partition by list(a)
|
||||
@@ -721,10 +721,10 @@ insert into t1 values (1,1),(1,2),(1,3),(1,4),
|
||||
(2,1),(2,2),(2,3),(2,4), (NULL,1);
|
||||
explain partitions select * from t1 where a IS NULL AND (b=1 OR b=2);
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pn_pnsp0,pn_pnsp1 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t1 pn_pnsp0,pn_pnsp1 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where (a IS NULL or a < 1) AND (b=1 OR b=2);
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pn_pnsp0,pn_pnsp1 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t1 pn_pnsp0,pn_pnsp1 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where (a IS NULL or a < 2) AND (b=1 OR b=2);
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0_p0sp0,p0_p0sp1,pn_pnsp0,pn_pnsp1 ALL NULL NULL NULL NULL 5 Using where
|
||||
@@ -753,7 +753,7 @@ count(*)
|
||||
1
|
||||
explain partitions select count(*) from t1 where s1 < 0 or s1 is null;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p3 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t1 p3 ALL NULL NULL NULL NULL 2 Using where
|
||||
drop table t1;
|
||||
create table t1 (a char(32) primary key)
|
||||
partition by key()
|
||||
@@ -812,24 +812,24 @@ insert into t1 values (18446744073709551000+1);
|
||||
insert into t1 values (18446744073709551614-1);
|
||||
explain partitions select * from t1 where a < 10;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1
|
||||
where a >= 18446744073709551000-1 and a <= 18446744073709551000+1;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p3,p4 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t1 p3,p4 ALL NULL NULL NULL NULL 3 Using where
|
||||
explain partitions select * from t1
|
||||
where a between 18446744073709551001 and 18446744073709551002;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p4 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t1 p4 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a = 18446744073709551000;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p4 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t1 p4 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a = 18446744073709551613;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p4 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t1 p4 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a = 18446744073709551614;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 0 Using where
|
||||
drop table t1;
|
||||
create table t1 (a int)
|
||||
partition by range(a) (
|
||||
@@ -853,34 +853,34 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p0 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a=0xFE;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p2 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t1 p2 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t2 where a=0xFE;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p2 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t2 p2 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a > 0xFE AND a <= 0xFF;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 0 Using where
|
||||
explain partitions select * from t2 where a > 0xFE AND a <= 0xFF;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 0 Using where
|
||||
explain partitions select * from t1 where a >= 0xFE AND a <= 0xFF;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p2 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t1 p2 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t2 where a >= 0xFE AND a <= 0xFF;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p2 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t2 p2 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a < 64 AND a >= 63;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t1 p0 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t2 where a < 64 AND a >= 63;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p0 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t2 p0 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a <= 64 AND a >= 63;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0,p1 ALL NULL NULL NULL NULL 6 Using where
|
||||
1 SIMPLE t1 p0,p1 ALL NULL NULL NULL NULL 4 Using where
|
||||
explain partitions select * from t2 where a <= 64 AND a >= 63;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 p0,p1 ALL NULL NULL NULL NULL 6 Using where
|
||||
1 SIMPLE t2 p0,p1 ALL NULL NULL NULL NULL 4 Using where
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
create table t1(a bigint unsigned not null) partition by range(a+0) (
|
||||
@@ -898,7 +898,7 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
explain partitions select * from t1 where
|
||||
a > 0xFFFFFFFFFFFFFFEC and a < 0xFFFFFFFFFFFFFFEE;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 0 Using where
|
||||
explain partitions select * from t1 where a>=0 and a <= 0xFFFFFFFFFFFFFFFF;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p1,p2,p3,p4 ALL NULL NULL NULL NULL 8 Using where
|
||||
|
@@ -21,19 +21,19 @@ select * from t1 where a > 1;
|
||||
a
|
||||
explain partitions select * from t1 where a is null;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pnull ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t1 pnull ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a >= 0;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0,p1 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t1 p0,p1 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a < 0;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pnull ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t1 pnull ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a <= 0;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pnull,p0 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t1 pnull,p0 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a > 1;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 0 Using where
|
||||
drop table t1;
|
||||
create table t1 (a int unsigned, b int unsigned)
|
||||
partition by range (a)
|
||||
@@ -63,19 +63,19 @@ select * from t1 where a > 1;
|
||||
a b
|
||||
explain partitions select * from t1 where a is null;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pnull_pnullsp0,pnull_pnullsp1 ALL NULL NULL NULL NULL 6 Using where
|
||||
1 SIMPLE t1 pnull_pnullsp0,pnull_pnullsp1 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a >= 0;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p0_p0sp0,p0_p0sp1,p1_p1sp0,p1_p1sp1 ALL NULL NULL NULL NULL 6 Using where
|
||||
1 SIMPLE t1 p0_p0sp0,p0_p0sp1,p1_p1sp0,p1_p1sp1 ALL NULL NULL NULL NULL 4 Using where
|
||||
explain partitions select * from t1 where a < 0;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pnull_pnullsp0,pnull_pnullsp1 ALL NULL NULL NULL NULL 6 Using where
|
||||
1 SIMPLE t1 pnull_pnullsp0,pnull_pnullsp1 ALL NULL NULL NULL NULL 2 Using where
|
||||
explain partitions select * from t1 where a <= 0;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 pnull_pnullsp0,pnull_pnullsp1,p0_p0sp0,p0_p0sp1 ALL NULL NULL NULL NULL 6 Using where
|
||||
1 SIMPLE t1 pnull_pnullsp0,pnull_pnullsp1,p0_p0sp0,p0_p0sp1 ALL NULL NULL NULL NULL 4 Using where
|
||||
explain partitions select * from t1 where a > 1;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 6 Using where
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 0 Using where
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (
|
||||
a int not null,
|
||||
|
@@ -3420,18 +3420,20 @@ AAA 8
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 9 Using where
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 9
|
||||
1 PRIMARY SUBQUERY#2 eq_ref distinct_key distinct_key 23 test.t1.a,test.t1.b 1
|
||||
2 SUBQUERY t1 ALL NULL NULL NULL NULL 9 Using temporary; Using filesort
|
||||
ALTER TABLE t1 ADD INDEX(a);
|
||||
SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
|
||||
a b
|
||||
AAA 8
|
||||
BBB 4
|
||||
CCC 7
|
||||
AAA 8
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 9 Using where
|
||||
1 PRIMARY SUBQUERY#2 ALL distinct_key NULL NULL NULL 9
|
||||
1 PRIMARY t1 ref a a 8 SUBQUERY#2.a 1 Using where
|
||||
2 SUBQUERY t1 ALL NULL NULL NULL NULL 9 Using temporary; Using filesort
|
||||
DROP TABLE t1;
|
||||
create table t1( f1 int,f2 int);
|
||||
|
@@ -75,6 +75,7 @@ explain extended
|
||||
select * from t1i where a1 in (select b1 from t2i where b1 > '0');
|
||||
select * from t1i where a1 in (select b1 from t2i where b1 > '0');
|
||||
|
||||
--replace_column 6 # 8 # 11 #
|
||||
explain extended
|
||||
select * from t1i where a1 in (select b1 from t2i where b1 > '0' group by b1);
|
||||
select * from t1i where a1 in (select b1 from t2i where b1 > '0' group by b1);
|
||||
@@ -83,10 +84,12 @@ explain extended
|
||||
select * from t1i where (a1, a2) in (select b1, b2 from t2i where b1 > '0');
|
||||
select * from t1i where (a1, a2) in (select b1, b2 from t2i where b1 > '0');
|
||||
|
||||
--replace_column 6 # 7 # 8 # 11 #
|
||||
explain extended
|
||||
select * from t1i where (a1, a2) in (select b1, b2 from t2i where b1 > '0' group by b1, b2);
|
||||
select * from t1i where (a1, a2) in (select b1, b2 from t2i where b1 > '0' group by b1, b2);
|
||||
|
||||
--replace_column 6 # 7 # 8 # 11 #
|
||||
explain extended
|
||||
select * from t1i where (a1, a2) in (select b1, min(b2) from t2i where b1 > '0' group by b1);
|
||||
select * from t1i where (a1, a2) in (select b1, min(b2) from t2i where b1 > '0' group by b1);
|
||||
@@ -174,6 +177,7 @@ where (a1, a2) in (select b1, b2 from t2 where b1 > '0') and
|
||||
(a1, a2) in (select c1, c2 from t3
|
||||
where (c1, c2) in (select b1, b2 from t2i where b2 > '0'));
|
||||
|
||||
--replace_column 6 # 7 # 8 # 11 #
|
||||
explain extended
|
||||
select * from t1i
|
||||
where (a1, a2) in (select b1, b2 from t2i where b1 > '0') and
|
||||
@@ -215,6 +219,7 @@ where (a1, a2) in (select b1, b2 from t2
|
||||
|
||||
|
||||
# multiple levels of nesting subqueries, unions
|
||||
--replace_column 6 # 7 # 8 # 11 #
|
||||
explain extended
|
||||
(select * from t1
|
||||
where (a1, a2) in (select b1, b2 from t2
|
||||
@@ -829,8 +834,12 @@ select min(a1) from t1 where 7 in (select b1 from t2);
|
||||
# This is the only correct result of all four queries. This difference is
|
||||
# filed as BUG#40037.
|
||||
set @@optimizer_switch='default,materialization=off';
|
||||
-- echo # with MariaDB and MWL#90, this particular case is solved:
|
||||
explain select min(a1) from t1 where 7 in (select b1 from t2);
|
||||
select min(a1) from t1 where 7 in (select b1 from t2);
|
||||
-- echo # but when we go around MWL#90 code, the problem still shows up:
|
||||
explain select min(a1) from t1 where 7 in (select b1 from t2) or 2> 4;
|
||||
select min(a1) from t1 where 7 in (select b1 from t2) or 2> 4;
|
||||
drop table t1,t2;
|
||||
|
||||
#
|
||||
|
@@ -490,6 +490,12 @@ drop table t1, t2;
|
||||
# Bug#33062: subquery in stored routine cause crash
|
||||
#
|
||||
|
||||
--disable_warnings
|
||||
drop procedure if exists p1;
|
||||
drop procedure if exists p2;
|
||||
drop procedure if exists p3;
|
||||
drop procedure if exists p4;
|
||||
--enable_warnings
|
||||
CREATE TABLE t1(a INT);
|
||||
CREATE TABLE t2(c INT);
|
||||
|
||||
|
@@ -190,10 +190,6 @@ bool Item_subselect::fix_fields(THD *thd_param, Item **ref)
|
||||
changed= 1;
|
||||
inside_first_fix_fields= FALSE;
|
||||
|
||||
|
||||
// all transformation is done (used by prepared statements)
|
||||
changed= 1;
|
||||
|
||||
/*
|
||||
Substitute the current item with an Item_in_optimizer that was
|
||||
created by Item_in_subselect::select_in_like_transformer and
|
||||
@@ -217,13 +213,13 @@ bool Item_subselect::fix_fields(THD *thd_param, Item **ref)
|
||||
if (!(*ref)->fixed)
|
||||
res= (*ref)->fix_fields(thd, ref);
|
||||
goto end;
|
||||
//psergey-merge: done_first_fix_fields= FALSE;
|
||||
|
||||
}
|
||||
// Is it one field subselect?
|
||||
if (engine->cols() > max_columns)
|
||||
{
|
||||
my_error(ER_OPERAND_COLUMNS, MYF(0), 1);
|
||||
//psergey-merge: done_first_fix_fields= FALSE;
|
||||
|
||||
goto end;
|
||||
}
|
||||
fix_length_and_dec();
|
||||
@@ -241,6 +237,7 @@ bool Item_subselect::fix_fields(THD *thd_param, Item **ref)
|
||||
|
||||
end:
|
||||
done_first_fix_fields= FALSE;
|
||||
inside_first_fix_fields= FALSE;
|
||||
thd->where= save_where;
|
||||
return res;
|
||||
}
|
||||
@@ -468,6 +465,12 @@ bool Item_subselect::exec()
|
||||
return (res);
|
||||
}
|
||||
|
||||
int Item_subselect::optimize()
|
||||
{
|
||||
int res;
|
||||
res= engine->optimize();
|
||||
return res;
|
||||
}
|
||||
|
||||
/*
|
||||
Compute the IN predicate if the left operand's cache changed.
|
||||
@@ -724,9 +727,6 @@ Item_singlerow_subselect::select_transformer(JOIN *join)
|
||||
void Item_singlerow_subselect::store(uint i, Item *item)
|
||||
{
|
||||
row[i]->store(item);
|
||||
//psergey-merge: can do without that: row[i]->cache_value();
|
||||
//psergey-backport-timours: ^ really, without that ^
|
||||
//psergey-try-merge-again:
|
||||
row[i]->cache_value();
|
||||
}
|
||||
|
||||
@@ -2088,7 +2088,7 @@ void Item_in_subselect::update_used_tables()
|
||||
@retval FALSE an execution method was chosen successfully
|
||||
*/
|
||||
|
||||
bool Item_in_subselect::setup_engine()
|
||||
bool Item_in_subselect::setup_engine(bool dont_switch_arena)
|
||||
{
|
||||
subselect_hash_sj_engine *new_engine= NULL;
|
||||
bool res= FALSE;
|
||||
@@ -2103,14 +2103,15 @@ bool Item_in_subselect::setup_engine()
|
||||
|
||||
old_engine= (subselect_single_select_engine*) engine;
|
||||
|
||||
if (arena->is_conventional())
|
||||
if (arena->is_conventional() || dont_switch_arena)
|
||||
arena= 0;
|
||||
else
|
||||
thd->set_n_backup_active_arena(arena, &backup);
|
||||
|
||||
if (!(new_engine= new subselect_hash_sj_engine(thd, this,
|
||||
old_engine)) ||
|
||||
new_engine->init_permanent(unit->get_unit_column_types()))
|
||||
new_engine->init_permanent(unit->get_unit_column_types(),
|
||||
old_engine->get_identifier()))
|
||||
{
|
||||
Item_subselect::trans_res trans_res;
|
||||
/*
|
||||
@@ -3457,7 +3458,7 @@ subselect_hash_sj_engine::get_strategy_using_schema()
|
||||
bitmap_set_bit(&partial_match_key_parts, i);
|
||||
++count_partial_match_columns;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/* If no column contains NULLs use regular hash index lookups. */
|
||||
@@ -3656,6 +3657,7 @@ bitmap_init_memroot(MY_BITMAP *map, uint n_bits, MEM_ROOT *mem_root)
|
||||
reexecution.
|
||||
|
||||
@param tmp_columns the items that produce the data for the temp table
|
||||
@param subquery_id subquery's identifier (for temptable name)
|
||||
|
||||
@details
|
||||
- Create a temporary table to store the result of the IN subquery. The
|
||||
@@ -3671,7 +3673,8 @@ bitmap_init_memroot(MY_BITMAP *map, uint n_bits, MEM_ROOT *mem_root)
|
||||
@retval FALSE otherwise
|
||||
*/
|
||||
|
||||
bool subselect_hash_sj_engine::init_permanent(List<Item> *tmp_columns)
|
||||
bool subselect_hash_sj_engine::init_permanent(List<Item> *tmp_columns,
|
||||
uint subquery_id)
|
||||
{
|
||||
/* Options to create_tmp_table. */
|
||||
ulonglong tmp_create_options= thd->options | TMP_TABLE_ALL_COLUMNS;
|
||||
@@ -3706,12 +3709,19 @@ bool subselect_hash_sj_engine::init_permanent(List<Item> *tmp_columns)
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
*/
|
||||
char buf[32];
|
||||
uint len= my_snprintf(buf, sizeof(buf), "SUBQUERY#%d", subquery_id);
|
||||
char *name;
|
||||
if (!(name= (char*)thd->alloc(len + 1)))
|
||||
DBUG_RETURN(TRUE);
|
||||
memcpy(name, buf, len+1);
|
||||
|
||||
if (!(result= new select_materialize_with_stats))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
if (((select_union*) result)->create_result_table(
|
||||
thd, tmp_columns, TRUE, tmp_create_options,
|
||||
"materialized subselect", TRUE))
|
||||
name, TRUE))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
tmp_table= ((select_union*) result)->table;
|
||||
@@ -3792,7 +3802,7 @@ bool subselect_hash_sj_engine::make_semi_join_conds()
|
||||
if (!(tmp_table_ref= (TABLE_LIST*) thd->alloc(sizeof(TABLE_LIST))))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
tmp_table_ref->init_one_table("", "materialized subselect", TL_READ);
|
||||
tmp_table_ref->init_one_table("", tmp_table->alias, TL_READ);
|
||||
tmp_table_ref->table= tmp_table;
|
||||
|
||||
context= new Name_resolution_context;
|
||||
@@ -3971,6 +3981,17 @@ void subselect_hash_sj_engine::cleanup()
|
||||
}
|
||||
|
||||
|
||||
int subselect_hash_sj_engine::optimize()
|
||||
{
|
||||
int res= 0;
|
||||
SELECT_LEX *save_select= thd->lex->current_select;
|
||||
thd->lex->current_select= materialize_join->select_lex;
|
||||
res= materialize_join->optimize();
|
||||
thd->lex->current_select= save_select;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
Execute a subquery IN predicate via materialization.
|
||||
|
||||
|
@@ -46,15 +46,16 @@ public:
|
||||
< child_join->prepare
|
||||
< engine->prepare
|
||||
*ref= substitution;
|
||||
substitution= NULL;
|
||||
< Item_subselect::fix_fields
|
||||
*/
|
||||
Item *substitution;
|
||||
public:
|
||||
/* unit of subquery */
|
||||
st_select_lex_unit *unit;
|
||||
protected:
|
||||
/* engine that perform execution of subselect (single select or union) */
|
||||
subselect_engine *engine;
|
||||
protected:
|
||||
/* old engine if engine was changed */
|
||||
subselect_engine *old_engine;
|
||||
/* cache of used external tables */
|
||||
@@ -139,6 +140,7 @@ public:
|
||||
bool mark_as_dependent(THD *thd, st_select_lex *select, Item *item);
|
||||
void fix_after_pullout(st_select_lex *new_parent, Item **ref);
|
||||
void recalc_used_tables(st_select_lex *new_parent, bool after_pullout);
|
||||
virtual int optimize();
|
||||
virtual bool exec();
|
||||
virtual void fix_length_and_dec();
|
||||
table_map used_tables() const;
|
||||
@@ -333,7 +335,9 @@ protected:
|
||||
all JOIN in UNION
|
||||
*/
|
||||
Item *expr;
|
||||
public:
|
||||
Item_in_optimizer *optimizer;
|
||||
protected:
|
||||
bool was_null;
|
||||
bool abort_on_null;
|
||||
public:
|
||||
@@ -379,6 +383,23 @@ public:
|
||||
};
|
||||
enum_exec_method exec_method;
|
||||
|
||||
/*
|
||||
JTBM: temporary measure to tell JTBM predicates from SJ predicates
|
||||
psergey-jtbm-todo: can't we do without this?
|
||||
- either remove it altogether
|
||||
- or put into enum_exec_method
|
||||
|
||||
We can't remove it altogether as it is used to classify contents in
|
||||
join->sj_subselects.
|
||||
jtbm-todo: option 1: let sj_subselects list pairs.
|
||||
*/
|
||||
bool is_flattenable_semijoin;
|
||||
|
||||
/*
|
||||
Cost to populate the temporary table (set on if-needed basis).
|
||||
*/
|
||||
//double startup_cost;
|
||||
|
||||
bool *get_cond_guard(int i)
|
||||
{
|
||||
return pushed_cond_guards ? pushed_cond_guards + i : NULL;
|
||||
@@ -428,7 +449,7 @@ public:
|
||||
bool fix_fields(THD *thd, Item **ref);
|
||||
void fix_after_pullout(st_select_lex *new_parent, Item **ref);
|
||||
void update_used_tables();
|
||||
bool setup_engine();
|
||||
bool setup_engine(bool dont_switch_arena);
|
||||
bool init_left_expr_cache();
|
||||
/* Inform 'this' that it was computed, and contains a valid result. */
|
||||
void set_first_execution() { if (first_execution) first_execution= FALSE; }
|
||||
@@ -502,6 +523,7 @@ public:
|
||||
THD * get_thd() { return thd; }
|
||||
virtual int prepare()= 0;
|
||||
virtual void fix_length_and_dec(Item_cache** row)= 0;
|
||||
virtual int optimize() { DBUG_ASSERT(0); return 0; }
|
||||
/*
|
||||
Execute the engine
|
||||
|
||||
@@ -734,7 +756,7 @@ inline bool Item_subselect::is_uncacheable() const
|
||||
|
||||
class subselect_hash_sj_engine : public subselect_engine
|
||||
{
|
||||
protected:
|
||||
public:
|
||||
/* The table into which the subquery is materialized. */
|
||||
TABLE *tmp_table;
|
||||
/* TRUE if the subquery was materialized into a temp table. */
|
||||
@@ -746,14 +768,16 @@ protected:
|
||||
of subselect_single_select_engine::[prepare | cols].
|
||||
*/
|
||||
subselect_single_select_engine *materialize_engine;
|
||||
protected:
|
||||
/* The engine used to compute the IN predicate. */
|
||||
subselect_engine *lookup_engine;
|
||||
/*
|
||||
QEP to execute the subquery and materialize its result into a
|
||||
temporary table. Created during the first call to exec().
|
||||
*/
|
||||
public:
|
||||
JOIN *materialize_join;
|
||||
|
||||
protected:
|
||||
/* Keyparts of the only non-NULL composite index in a rowid merge. */
|
||||
MY_BITMAP non_null_key_parts;
|
||||
/* Keyparts of the single column indexes with NULL, one keypart per index. */
|
||||
@@ -766,7 +790,9 @@ protected:
|
||||
IN results because index lookups sometimes match values that are actually
|
||||
not equal to the search key in SQL terms.
|
||||
*/
|
||||
public:
|
||||
Item_cond_and *semi_join_conds;
|
||||
protected:
|
||||
/* Possible execution strategies that can be used to compute hash semi-join.*/
|
||||
enum exec_strategy {
|
||||
UNDEFINED,
|
||||
@@ -802,10 +828,11 @@ public:
|
||||
}
|
||||
~subselect_hash_sj_engine();
|
||||
|
||||
bool init_permanent(List<Item> *tmp_columns);
|
||||
bool init_permanent(List<Item> *tmp_columns, uint subquery_id);
|
||||
bool init_runtime();
|
||||
void cleanup();
|
||||
int prepare() { return 0; } /* Override virtual function in base class. */
|
||||
int optimize();
|
||||
int exec();
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
uint cols()
|
||||
|
@@ -2285,7 +2285,8 @@ int SQL_SELECT::test_quick_select(THD *thd, key_map keys_to_use,
|
||||
quick=0;
|
||||
needed_reg.clear_all();
|
||||
quick_keys.clear_all();
|
||||
if (keys_to_use.is_clear_all())
|
||||
DBUG_ASSERT(!head->is_filled_at_execution());
|
||||
if (keys_to_use.is_clear_all() || head->is_filled_at_execution())
|
||||
DBUG_RETURN(0);
|
||||
records= head->file->stats.records;
|
||||
if (!records)
|
||||
|
@@ -2,7 +2,7 @@
|
||||
@file
|
||||
|
||||
@brief
|
||||
Subquery optimization code here.
|
||||
Semi-join subquery optimizations code
|
||||
|
||||
*/
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
|
||||
#include <my_bit.h>
|
||||
|
||||
// Our own:
|
||||
static
|
||||
bool subquery_types_allow_materialization(Item_in_subselect *in_subs);
|
||||
static bool replace_where_subcondition(JOIN *join, Item **expr,
|
||||
@@ -25,6 +24,8 @@ static bool replace_where_subcondition(JOIN *join, Item **expr,
|
||||
static int subq_sj_candidate_cmp(Item_in_subselect* const *el1,
|
||||
Item_in_subselect* const *el2);
|
||||
static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred);
|
||||
static bool convert_subq_to_jtbm(JOIN *parent_join,
|
||||
Item_in_subselect *subq_pred, bool *remove);
|
||||
static TABLE_LIST *alloc_join_nest(THD *thd);
|
||||
static
|
||||
void fix_list_after_tbl_changes(SELECT_LEX *new_parent, List<TABLE_LIST> *tlist);
|
||||
@@ -50,17 +51,22 @@ static void remove_subq_pushed_predicates(JOIN *join, Item **where);
|
||||
/*
|
||||
Check if we need JOIN::prepare()-phase subquery rewrites and if yes, do them
|
||||
|
||||
SYNOPSIS
|
||||
check_and_do_in_subquery_rewrites()
|
||||
join Subquery's join
|
||||
|
||||
DESCRIPTION
|
||||
Check if we need to do
|
||||
- subquery->semi-join rewrite
|
||||
- subquery -> mergeable semi-join rewrite
|
||||
- if the subquery can be handled with materialization
|
||||
- 'substitution' rewrite for table-less subqueries like "(select 1)"
|
||||
|
||||
and mark appropriately
|
||||
- IN->EXISTS rewrite
|
||||
and, depending on the rewrite, either do it, or record it to be done at a
|
||||
later phase.
|
||||
|
||||
RETURN
|
||||
0 - OK
|
||||
-1 - Some sort of query error
|
||||
Other - Some sort of query error
|
||||
*/
|
||||
|
||||
int check_and_do_in_subquery_rewrites(JOIN *join)
|
||||
@@ -166,6 +172,7 @@ int check_and_do_in_subquery_rewrites(JOIN *join)
|
||||
(void)subquery_types_allow_materialization(in_subs);
|
||||
|
||||
in_subs->emb_on_expr_nest= thd->thd_marker.emb_on_expr_nest;
|
||||
in_subs->is_flattenable_semijoin= TRUE;
|
||||
|
||||
/* Register the subquery for further processing in flatten_subqueries() */
|
||||
select_lex->
|
||||
@@ -220,10 +227,23 @@ int check_and_do_in_subquery_rewrites(JOIN *join)
|
||||
(in_subs->is_top_level_item() ||
|
||||
optimizer_flag(thd, OPTIMIZER_SWITCH_PARTIAL_MATCH_ROWID_MERGE) ||
|
||||
optimizer_flag(thd, OPTIMIZER_SWITCH_PARTIAL_MATCH_TABLE_SCAN)) &&//4
|
||||
!in_subs->is_correlated && // 5
|
||||
in_subs->exec_method == Item_in_subselect::NOT_TRANSFORMED) // 6
|
||||
!in_subs->is_correlated) // 5
|
||||
{
|
||||
if (in_subs->exec_method == Item_in_subselect::NOT_TRANSFORMED)
|
||||
in_subs->exec_method= Item_in_subselect::MATERIALIZATION;
|
||||
|
||||
/*
|
||||
If the subquery is an AND-part of WHERE register for being processed
|
||||
with jtbm strategy
|
||||
*/
|
||||
if (in_subs->exec_method == Item_in_subselect::MATERIALIZATION &&
|
||||
thd->thd_marker.emb_on_expr_nest == (TABLE_LIST*)0x1)
|
||||
{
|
||||
in_subs->emb_on_expr_nest= thd->thd_marker.emb_on_expr_nest;
|
||||
in_subs->is_flattenable_semijoin= FALSE;
|
||||
select_lex->outer_select()->
|
||||
join->sj_subselects.append(thd->mem_root, in_subs);
|
||||
}
|
||||
}
|
||||
|
||||
Item_subselect::trans_res trans_res;
|
||||
@@ -338,6 +358,69 @@ bool subquery_types_allow_materialization(Item_in_subselect *in_subs)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Finalize IN->EXISTS conversion in case we couldn't use materialization.
|
||||
|
||||
DESCRIPTION Invoke the IN->EXISTS converter
|
||||
Replace the Item_in_subselect with its wrapper Item_in_optimizer in WHERE.
|
||||
|
||||
RETURN
|
||||
FALSE - Ok
|
||||
TRUE - Fatal error
|
||||
*/
|
||||
|
||||
static
|
||||
bool make_in_exists_conversion(THD *thd, JOIN *join, Item_in_subselect *item)
|
||||
{
|
||||
DBUG_ENTER("make_in_exists_conversion");
|
||||
JOIN *child_join= item->unit->first_select()->join;
|
||||
Item_subselect::trans_res res;
|
||||
item->changed= 0;
|
||||
item->fixed= 0;
|
||||
|
||||
SELECT_LEX *save_select_lex= thd->lex->current_select;
|
||||
thd->lex->current_select= item->unit->first_select();
|
||||
|
||||
res= item->select_transformer(child_join);
|
||||
|
||||
thd->lex->current_select= save_select_lex;
|
||||
|
||||
if (res == Item_subselect::RES_ERROR)
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
item->changed= 1;
|
||||
item->fixed= 1;
|
||||
|
||||
Item *substitute= item->substitution;
|
||||
bool do_fix_fields= !item->substitution->fixed;
|
||||
/*
|
||||
The Item_subselect has already been wrapped with Item_in_optimizer, so we
|
||||
should search for item->optimizer, not 'item'.
|
||||
*/
|
||||
Item *replace_me= item->optimizer;
|
||||
DBUG_ASSERT(replace_me==substitute);
|
||||
|
||||
Item **tree= (item->emb_on_expr_nest == (TABLE_LIST*)1)?
|
||||
&join->conds : &(item->emb_on_expr_nest->on_expr);
|
||||
if (replace_where_subcondition(join, tree, replace_me, substitute,
|
||||
do_fix_fields))
|
||||
DBUG_RETURN(TRUE);
|
||||
item->substitution= NULL;
|
||||
|
||||
if (!thd->stmt_arena->is_conventional())
|
||||
{
|
||||
tree= (item->emb_on_expr_nest == (TABLE_LIST*)1)?
|
||||
&join->select_lex->prep_where :
|
||||
&(item->emb_on_expr_nest->prep_on_expr);
|
||||
|
||||
if (replace_where_subcondition(join, tree, replace_me, substitute,
|
||||
FALSE))
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Convert semi-join subquery predicates into semi-join join nests
|
||||
|
||||
@@ -445,26 +528,42 @@ bool convert_join_subqueries_to_semijoins(JOIN *join)
|
||||
// #tables-in-parent-query + #tables-in-subquery < MAX_TABLES
|
||||
/* Replace all subqueries to be flattened with Item_int(1) */
|
||||
arena= thd->activate_stmt_arena_if_needed(&backup);
|
||||
for (in_subq= join->sj_subselects.front();
|
||||
in_subq != in_subq_end &&
|
||||
join->tables + (*in_subq)->unit->first_select()->join->tables < MAX_TABLES;
|
||||
in_subq++)
|
||||
{
|
||||
Item **tree= ((*in_subq)->emb_on_expr_nest == (TABLE_LIST*)1)?
|
||||
&join->conds : &((*in_subq)->emb_on_expr_nest->on_expr);
|
||||
if (replace_where_subcondition(join, tree, *in_subq, new Item_int(1),
|
||||
FALSE))
|
||||
DBUG_RETURN(TRUE); /* purecov: inspected */
|
||||
}
|
||||
|
||||
for (in_subq= join->sj_subselects.front();
|
||||
in_subq != in_subq_end &&
|
||||
join->tables + (*in_subq)->unit->first_select()->join->tables < MAX_TABLES;
|
||||
in_subq++)
|
||||
{
|
||||
bool remove_item= TRUE;
|
||||
if ((*in_subq)->is_flattenable_semijoin)
|
||||
{
|
||||
if (convert_subq_to_sj(join, *in_subq))
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (convert_subq_to_jtbm(join, *in_subq, &remove_item))
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
if (remove_item)
|
||||
{
|
||||
Item **tree= ((*in_subq)->emb_on_expr_nest == (TABLE_LIST*)1)?
|
||||
&join->conds : &((*in_subq)->emb_on_expr_nest->on_expr);
|
||||
Item *replace_me= *in_subq;
|
||||
/*
|
||||
JTBM: the subquery was already mapped with Item_in_optimizer, so we
|
||||
should search for that, not for original Item_in_subselect.
|
||||
TODO: what about delaying that rewrite until here?
|
||||
*/
|
||||
if (!(*in_subq)->is_flattenable_semijoin)
|
||||
{
|
||||
replace_me= (*in_subq)->optimizer;
|
||||
}
|
||||
if (replace_where_subcondition(join, tree, replace_me, new Item_int(1),
|
||||
FALSE))
|
||||
DBUG_RETURN(TRUE); /* purecov: inspected */
|
||||
}
|
||||
}
|
||||
skip_conversion:
|
||||
/*
|
||||
3. Finalize (perform IN->EXISTS rewrite) the subqueries that we didn't
|
||||
@@ -494,7 +593,19 @@ skip_conversion:
|
||||
bool do_fix_fields= !(*in_subq)->substitution->fixed;
|
||||
Item **tree= ((*in_subq)->emb_on_expr_nest == (TABLE_LIST*)1)?
|
||||
&join->conds : &((*in_subq)->emb_on_expr_nest->on_expr);
|
||||
if (replace_where_subcondition(join, tree, *in_subq, substitute,
|
||||
|
||||
Item *replace_me= *in_subq;
|
||||
/*
|
||||
JTBM: the subquery was already mapped with Item_in_optimizer, so we
|
||||
should search for that, not for original Item_in_subselect.
|
||||
TODO: what about delaying that rewrite until here?
|
||||
*/
|
||||
if (!(*in_subq)->is_flattenable_semijoin)
|
||||
{
|
||||
replace_me= (*in_subq)->optimizer;
|
||||
}
|
||||
|
||||
if (replace_where_subcondition(join, tree, replace_me, substitute,
|
||||
do_fix_fields))
|
||||
DBUG_RETURN(TRUE);
|
||||
(*in_subq)->substitution= NULL;
|
||||
@@ -505,7 +616,7 @@ skip_conversion:
|
||||
&join->select_lex->prep_where :
|
||||
&((*in_subq)->emb_on_expr_nest->prep_on_expr);
|
||||
|
||||
if (replace_where_subcondition(join, tree, *in_subq, substitute,
|
||||
if (replace_where_subcondition(join, tree, replace_me, substitute,
|
||||
FALSE))
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
@@ -517,6 +628,61 @@ skip_conversion:
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Get #output_rows and scan_time estimates for a "delayed" table.
|
||||
|
||||
SYNOPSIS
|
||||
get_delayed_table_estimates()
|
||||
table IN Table to get estimates for
|
||||
out_rows OUT E(#rows in the table)
|
||||
scan_time OUT E(scan_time).
|
||||
startup_cost OUT cost to populate the table.
|
||||
|
||||
DESCRIPTION
|
||||
Get #output_rows and scan_time estimates for a "delayed" table. By
|
||||
"delayed" here we mean that the table is filled at the start of query
|
||||
execution. This means that the optimizer can't use table statistics to
|
||||
get #rows estimate for it, it has to call this function instead.
|
||||
|
||||
This function is expected to make different actions depending on the nature
|
||||
of the table. At the moment there is only one kind of delayed tables,
|
||||
non-flattenable semi-joins.
|
||||
*/
|
||||
|
||||
void get_delayed_table_estimates(TABLE *table,
|
||||
ha_rows *out_rows,
|
||||
double *scan_time,
|
||||
double *startup_cost)
|
||||
{
|
||||
Item_in_subselect *item= table->pos_in_table_list->jtbm_subselect;
|
||||
item->optimize();
|
||||
|
||||
DBUG_ASSERT(item->engine->engine_type() ==
|
||||
subselect_engine::HASH_SJ_ENGINE);
|
||||
|
||||
subselect_hash_sj_engine *hash_sj_engine=
|
||||
((subselect_hash_sj_engine*)item->engine);
|
||||
JOIN *join= hash_sj_engine->materialize_join;
|
||||
|
||||
double rows= 1;
|
||||
double read_time= 0.0;
|
||||
|
||||
/* Calculate #rows and cost of join execution */
|
||||
for (uint i= join->const_tables; i < join->tables; i++)
|
||||
{
|
||||
rows *= join->best_positions[i].records_read;
|
||||
read_time += join->best_positions[i].read_time;
|
||||
}
|
||||
*out_rows= rows;
|
||||
*startup_cost= read_time;
|
||||
/* Calculate cost of scanning the temptable */
|
||||
double data_size= rows * hash_sj_engine->tmp_table->s->reclength;
|
||||
/* Do like in handler::read_time */
|
||||
*scan_time= data_size/IO_SIZE + 2;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
@brief Replaces an expression destructively inside the expression tree of
|
||||
the WHERE clase.
|
||||
@@ -534,6 +700,7 @@ skip_conversion:
|
||||
@return <code>true</code> if there was an error, <code>false</code> if
|
||||
successful.
|
||||
*/
|
||||
|
||||
static bool replace_where_subcondition(JOIN *join, Item **expr,
|
||||
Item *old_cond, Item *new_cond,
|
||||
bool do_fix_fields)
|
||||
@@ -769,8 +936,7 @@ static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred)
|
||||
/* 3. Remove the original subquery predicate from the WHERE/ON */
|
||||
|
||||
// The subqueries were replaced for Item_int(1) earlier
|
||||
subq_pred->exec_method=
|
||||
Item_in_subselect::SEMI_JOIN; // for subsequent executions
|
||||
subq_pred->exec_method= Item_in_subselect::SEMI_JOIN; // for subsequent executions
|
||||
/*TODO: also reset the 'with_subselect' there. */
|
||||
|
||||
/* n. Adjust the parent_join->tables counter */
|
||||
@@ -887,6 +1053,118 @@ static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred)
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Convert subquery predicate into non-mergeable semi-join nest.
|
||||
|
||||
TODO:
|
||||
why does this do IN-EXISTS conversion? Can't we unify it with mergeable
|
||||
semi-joins? currently, convert_subq_to_sj() cannot fail to convert (unless
|
||||
fatal errors)
|
||||
|
||||
|
||||
RETURN
|
||||
FALSE - Ok
|
||||
TRUE - Fatal error
|
||||
*/
|
||||
|
||||
static bool convert_subq_to_jtbm(JOIN *parent_join,
|
||||
Item_in_subselect *subq_pred,
|
||||
bool *remove_item)
|
||||
{
|
||||
SELECT_LEX *parent_lex= parent_join->select_lex;
|
||||
List<TABLE_LIST> *emb_join_list= &parent_lex->top_join_list;
|
||||
TABLE_LIST *emb_tbl_nest= NULL; // will change when we learn to handle outer joins
|
||||
TABLE_LIST *tl;
|
||||
DBUG_ENTER("convert_subq_to_jtbm");
|
||||
|
||||
if (subq_pred->setup_engine(TRUE))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
if (subq_pred->engine->engine_type() != subselect_engine::HASH_SJ_ENGINE)
|
||||
{
|
||||
*remove_item= FALSE;
|
||||
make_in_exists_conversion(parent_join->thd, parent_join, subq_pred);
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
*remove_item= TRUE;
|
||||
|
||||
TABLE_LIST *jtbm;
|
||||
char *tbl_alias;
|
||||
const char alias_mask[]="SUBQUERY#%d";
|
||||
if (!(tbl_alias= (char*)parent_join->thd->calloc(sizeof(alias_mask)+5)) ||
|
||||
!(jtbm= alloc_join_nest(parent_join->thd))) //todo: this is not a join nest!
|
||||
{
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
||||
jtbm->join_list= emb_join_list;
|
||||
jtbm->embedding= emb_tbl_nest;
|
||||
jtbm->jtbm_subselect= subq_pred;
|
||||
jtbm->nested_join= NULL;
|
||||
|
||||
/* Nests do not participate in those 'chains', so: */
|
||||
/* jtbm->next_leaf= jtbm->next_local= jtbm->next_global == NULL*/
|
||||
emb_join_list->push_back(jtbm);
|
||||
|
||||
/*
|
||||
Inject the jtbm table into TABLE_LIST::next_leaf list, so that
|
||||
make_join_statistics() and co. can find it.
|
||||
*/
|
||||
for (tl= parent_lex->leaf_tables; tl->next_leaf; tl= tl->next_leaf) ;
|
||||
tl->next_leaf= jtbm;
|
||||
|
||||
/*
|
||||
Same as above for TABLE_LIST::next_local chain
|
||||
(a theory: a next_local chain always starts with ::leaf_tables
|
||||
because view's tables are inserted after the view)
|
||||
*/
|
||||
for (tl= parent_lex->leaf_tables; tl->next_local; tl= tl->next_local) ;
|
||||
tl->next_local= jtbm;
|
||||
|
||||
/* A theory: no need to re-connect the next_global chain */
|
||||
|
||||
subselect_hash_sj_engine *hash_sj_engine=
|
||||
((subselect_hash_sj_engine*)subq_pred->engine);
|
||||
jtbm->table= hash_sj_engine->tmp_table;
|
||||
|
||||
jtbm->table->tablenr= parent_join->tables;
|
||||
jtbm->table->map= table_map(1) << (parent_join->tables);
|
||||
|
||||
parent_join->tables++;
|
||||
|
||||
Item *conds= hash_sj_engine->semi_join_conds;
|
||||
conds->fix_after_pullout(parent_lex, &conds);
|
||||
|
||||
DBUG_EXECUTE("where", print_where(conds,"SJ-EXPR", QT_ORDINARY););
|
||||
|
||||
my_snprintf(tbl_alias, sizeof(alias_mask)+5, alias_mask,
|
||||
hash_sj_engine->materialize_join->select_lex->select_number);
|
||||
jtbm->alias= tbl_alias;
|
||||
|
||||
/* Inject sj_on_expr into the parent's WHERE or ON */
|
||||
if (emb_tbl_nest)
|
||||
{
|
||||
DBUG_ASSERT(0);
|
||||
/*emb_tbl_nest->on_expr= and_items(emb_tbl_nest->on_expr,
|
||||
sj_nest->sj_on_expr);
|
||||
emb_tbl_nest->on_expr->fix_fields(parent_join->thd, &emb_tbl_nest->on_expr);
|
||||
*/
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Inject into the WHERE */
|
||||
parent_join->conds= and_items(parent_join->conds, conds);
|
||||
parent_join->conds->fix_fields(parent_join->thd, &parent_join->conds);
|
||||
parent_join->select_lex->where= parent_join->conds;
|
||||
}
|
||||
|
||||
/* Don't unlink the child subselect, as the subquery will be used. */
|
||||
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
|
||||
|
||||
static TABLE_LIST *alloc_join_nest(THD *thd)
|
||||
{
|
||||
TABLE_LIST *tbl;
|
||||
@@ -1245,6 +1523,7 @@ bool optimize_semijoin_nests(JOIN *join, table_map all_table_map)
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Get estimated record length for semi-join materialization temptable
|
||||
|
||||
@@ -1301,7 +1580,7 @@ static uint get_tmp_table_rec_length(List<Item> &items)
|
||||
return len;
|
||||
}
|
||||
|
||||
//psergey-todo: is the below a kind of table elimination??
|
||||
|
||||
/*
|
||||
Check if table's KEYUSE elements have an eq_ref(outer_tables) candidate
|
||||
|
||||
@@ -1318,6 +1597,8 @@ static uint get_tmp_table_rec_length(List<Item> &items)
|
||||
Check again if it is feasible to factor common parts with constant table
|
||||
search
|
||||
|
||||
Also check if it's feasible to factor common parts with table elimination
|
||||
|
||||
RETURN
|
||||
TRUE - There exists an eq_ref(outer-tables) candidate
|
||||
FALSE - Otherwise
|
||||
@@ -1368,6 +1649,7 @@ bool find_eq_ref_candidate(TABLE *table, table_map sj_inner_tables)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Do semi-join optimization step after we've added a new tab to join prefix
|
||||
|
||||
@@ -3504,3 +3786,26 @@ static void remove_subq_pushed_predicates(JOIN *join, Item **where)
|
||||
}
|
||||
|
||||
|
||||
bool do_jtbm_materialization_if_needed(JOIN_TAB *tab)
|
||||
{
|
||||
Item_in_subselect *in_subs;
|
||||
if (tab->table->pos_in_table_list &&
|
||||
(in_subs= tab->table->pos_in_table_list->jtbm_subselect))
|
||||
{
|
||||
DBUG_ASSERT(in_subs->engine->engine_type() ==
|
||||
subselect_engine::HASH_SJ_ENGINE);
|
||||
|
||||
subselect_hash_sj_engine *hash_sj_engine=
|
||||
((subselect_hash_sj_engine*)in_subs->engine);
|
||||
if (!hash_sj_engine->is_materialized)
|
||||
{
|
||||
hash_sj_engine->materialize_join->exec();
|
||||
hash_sj_engine->is_materialized= TRUE;
|
||||
|
||||
if (hash_sj_engine->materialize_join->error || tab->join->thd->is_fatal_error)
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@@ -1,4 +1,6 @@
|
||||
/* */
|
||||
/*
|
||||
Semi-join subquery optimization code definitions
|
||||
*/
|
||||
|
||||
#ifdef USE_PRAGMA_INTERFACE
|
||||
#pragma interface /* gcc class implementation */
|
||||
@@ -365,4 +367,10 @@ int clear_sj_tmp_tables(JOIN *join);
|
||||
int rewrite_to_index_subquery_engine(JOIN *join);
|
||||
|
||||
|
||||
void get_delayed_table_estimates(TABLE *table,
|
||||
ha_rows *out_rows,
|
||||
double *scan_time,
|
||||
double *startup_cost);
|
||||
|
||||
bool do_jtbm_materialization_if_needed(JOIN_TAB *tab);
|
||||
|
||||
|
@@ -7661,6 +7661,17 @@ bool setup_tables(THD *thd, Name_resolution_context *context,
|
||||
if (res)
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
if (table_list->jtbm_subselect)
|
||||
{
|
||||
Item *item= table_list->jtbm_subselect;
|
||||
if (item->fix_fields(thd, &item))
|
||||
{
|
||||
my_error(ER_TOO_MANY_TABLES,MYF(0),MAX_TABLES);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
DBUG_ASSERT(item == table_list->jtbm_subselect);
|
||||
table_list->jtbm_subselect->setup_engine(FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
/* Precompute and store the row types of NATURAL/USING joins. */
|
||||
|
@@ -33,7 +33,6 @@
|
||||
|
||||
#define NO_MORE_RECORDS_IN_BUFFER (uint)(-1)
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* Join cache module
|
||||
******************************************************************************/
|
||||
@@ -1778,6 +1777,13 @@ enum_nested_loop_state JOIN_CACHE_BNL::join_matching_records(bool skip_last)
|
||||
}
|
||||
|
||||
/* Start retrieving all records of the joined table */
|
||||
|
||||
if (do_jtbm_materialization_if_needed(join_tab))
|
||||
{
|
||||
rc= NESTED_LOOP_ERROR;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if ((error= join_init_read_record(join_tab)))
|
||||
{
|
||||
rc= error < 0 ? NESTED_LOOP_NO_MORE_ROWS: NESTED_LOOP_ERROR;
|
||||
|
@@ -2445,7 +2445,7 @@ bool JOIN::setup_subquery_materialization()
|
||||
{
|
||||
Item_in_subselect *in_subs= (Item_in_subselect*) subquery_predicate;
|
||||
if (in_subs->exec_method == Item_in_subselect::MATERIALIZATION &&
|
||||
in_subs->setup_engine())
|
||||
in_subs->setup_engine(FALSE))
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -2531,9 +2531,10 @@ make_join_statistics(JOIN *join, TABLE_LIST *tables_arg, COND *conds,
|
||||
DBUG_ENTER("make_join_statistics");
|
||||
|
||||
table_count=join->tables;
|
||||
stat=(JOIN_TAB*) join->thd->calloc(sizeof(JOIN_TAB)*table_count);
|
||||
|
||||
stat=(JOIN_TAB*) join->thd->calloc(sizeof(JOIN_TAB)*(table_count));
|
||||
stat_ref=(JOIN_TAB**) join->thd->alloc(sizeof(JOIN_TAB*)*MAX_TABLES);
|
||||
table_vector=(TABLE**) join->thd->alloc(sizeof(TABLE*)*(table_count*2));
|
||||
table_vector=(TABLE**) join->thd->alloc(sizeof(TABLE*)*((table_count)*2));
|
||||
if (!stat || !stat_ref || !table_vector)
|
||||
DBUG_RETURN(1); // Eom /* purecov: inspected */
|
||||
|
||||
@@ -2565,7 +2566,7 @@ make_join_statistics(JOIN *join, TABLE_LIST *tables_arg, COND *conds,
|
||||
table->reginfo.join_tab=s;
|
||||
table->reginfo.not_exists_optimize=0;
|
||||
bzero((char*) table->const_key_parts, sizeof(key_part_map)*table->s->keys);
|
||||
all_table_map|= table->map;
|
||||
all_table_map|= s->table->map;
|
||||
s->join=join;
|
||||
s->info=0; // For describe
|
||||
|
||||
@@ -2580,9 +2581,11 @@ make_join_statistics(JOIN *join, TABLE_LIST *tables_arg, COND *conds,
|
||||
{
|
||||
/* s is the only inner table of an outer join */
|
||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
if ((!table->file->stats.records || table->no_partitions_used) && !embedding)
|
||||
if (!table->is_filled_at_execution() &&
|
||||
(!table->file->stats.records || table->no_partitions_used) && !embedding)
|
||||
#else
|
||||
if (!table->file->stats.records && !embedding)
|
||||
if (!table->is_filled_at_execution() &&
|
||||
!table->file->stats.records && !embedding)
|
||||
#endif
|
||||
{ // Empty table
|
||||
s->dependent= 0; // Ignore LEFT JOIN depend.
|
||||
@@ -2616,7 +2619,8 @@ make_join_statistics(JOIN *join, TABLE_LIST *tables_arg, COND *conds,
|
||||
#else
|
||||
const bool no_partitions_used= FALSE;
|
||||
#endif
|
||||
if ((table->s->system || table->file->stats.records <= 1 ||
|
||||
if (!table->is_filled_at_execution() &&
|
||||
(table->s->system || table->file->stats.records <= 1 ||
|
||||
no_partitions_used) &&
|
||||
!s->dependent &&
|
||||
(table->file->ha_table_flags() & HA_STATS_RECORDS_IS_EXACT) &&
|
||||
@@ -2626,6 +2630,7 @@ make_join_statistics(JOIN *join, TABLE_LIST *tables_arg, COND *conds,
|
||||
no_rows_const_tables |= table->map;
|
||||
}
|
||||
}
|
||||
|
||||
stat_vector[i]=0;
|
||||
join->outer_join=outer_join;
|
||||
|
||||
@@ -2714,6 +2719,9 @@ make_join_statistics(JOIN *join, TABLE_LIST *tables_arg, COND *conds,
|
||||
{
|
||||
table=s->table;
|
||||
|
||||
if (table->is_filled_at_execution())
|
||||
continue;
|
||||
|
||||
/*
|
||||
If equi-join condition by a key is null rejecting and after a
|
||||
substitution of a const table the key value happens to be null
|
||||
@@ -2866,6 +2874,7 @@ make_join_statistics(JOIN *join, TABLE_LIST *tables_arg, COND *conds,
|
||||
|
||||
for (s=stat ; s < stat_end ; s++)
|
||||
{
|
||||
s->startup_cost= 0;
|
||||
if (s->type == JT_SYSTEM || s->type == JT_CONST)
|
||||
{
|
||||
/* Only one matching row */
|
||||
@@ -2873,8 +2882,20 @@ make_join_statistics(JOIN *join, TABLE_LIST *tables_arg, COND *conds,
|
||||
continue;
|
||||
}
|
||||
/* Approximate found rows and time to read them */
|
||||
s->found_records=s->records=s->table->file->stats.records;
|
||||
s->read_time=(ha_rows) s->table->file->scan_time();
|
||||
|
||||
if (s->table->is_filled_at_execution())
|
||||
{
|
||||
get_delayed_table_estimates(s->table, &s->records, &s->read_time,
|
||||
&s->startup_cost);
|
||||
s->found_records= s->records;
|
||||
table->quick_condition_rows=s->records;
|
||||
}
|
||||
else
|
||||
{
|
||||
s->found_records= s->records= s->table->file->stats.records;
|
||||
s->read_time= s->table->file->scan_time();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Set a max range of how many seeks we can expect when using keys
|
||||
@@ -2900,7 +2921,8 @@ make_join_statistics(JOIN *join, TABLE_LIST *tables_arg, COND *conds,
|
||||
if (!s->const_keys.is_clear_all() && // (1)
|
||||
(!s->table->pos_in_table_list->embedding || // (2)
|
||||
(s->table->pos_in_table_list->embedding && // (3)
|
||||
s->table->pos_in_table_list->embedding->sj_on_expr))) // (3)
|
||||
s->table->pos_in_table_list->embedding->sj_on_expr)) && // (3)
|
||||
!s->table->is_filled_at_execution())
|
||||
{
|
||||
ha_rows records;
|
||||
SQL_SELECT *select;
|
||||
@@ -2938,7 +2960,7 @@ make_join_statistics(JOIN *join, TABLE_LIST *tables_arg, COND *conds,
|
||||
if (records != HA_POS_ERROR)
|
||||
{
|
||||
s->found_records=records;
|
||||
s->read_time= (ha_rows) (s->quick ? s->quick->read_time : 0.0);
|
||||
s->read_time= s->quick ? s->quick->read_time : 0.0;
|
||||
}
|
||||
delete select;
|
||||
}
|
||||
@@ -4265,6 +4287,7 @@ best_access_path(JOIN *join,
|
||||
double tmp;
|
||||
ha_rows rec;
|
||||
bool best_uses_jbuf= FALSE;
|
||||
Item_in_subselect* jtbm_subselect= s->table->pos_in_table_list->jtbm_subselect;
|
||||
|
||||
Loose_scan_opt loose_scan_opt;
|
||||
DBUG_ENTER("best_access_path");
|
||||
@@ -4617,8 +4640,9 @@ best_access_path(JOIN *join,
|
||||
else
|
||||
tmp= best_time; // Do nothing
|
||||
}
|
||||
loose_scan_opt.check_ref_access_part2(key, start_key, records, tmp);
|
||||
|
||||
tmp += s->startup_cost;
|
||||
loose_scan_opt.check_ref_access_part2(key, start_key, records, tmp);
|
||||
} /* not ft_key */
|
||||
if (tmp < best_time - records/(double) TIME_FOR_COMPARE)
|
||||
{
|
||||
@@ -4660,13 +4684,19 @@ best_access_path(JOIN *join,
|
||||
Since we have a 'ref' access path, and FORCE INDEX instructs us to
|
||||
choose it over ALL/index, there is no need to consider a full table
|
||||
scan.
|
||||
(5) Non-flattenable semi-joins: don't consider doing a scan of temporary
|
||||
table if we had an option to make lookups into it. In real-world cases,
|
||||
lookups are cheaper than full scans, but when the table is small, they
|
||||
can be [considered to be] more expensive, which causes lookups not to
|
||||
be used for cases with small datasets, which is annoying.
|
||||
*/
|
||||
if ((records >= s->found_records || best > s->read_time) && // (1)
|
||||
!(s->quick && best_key && s->quick->index == best_key->key && // (2)
|
||||
best_max_key_part >= s->table->quick_key_parts[best_key->key]) &&// (2)
|
||||
!((s->table->file->ha_table_flags() & HA_TABLE_SCAN_ON_INDEX) && // (3)
|
||||
! s->table->covering_keys.is_clear_all() && best_key && !s->quick) &&// (3)
|
||||
!(s->table->force_index && best_key && !s->quick)) // (4)
|
||||
!(s->table->force_index && best_key && !s->quick) && // (4)
|
||||
!(best_key && jtbm_subselect)) // (5)
|
||||
{ // Check full join
|
||||
ha_rows rnd_records= s->found_records;
|
||||
/*
|
||||
@@ -4713,8 +4743,7 @@ best_access_path(JOIN *join,
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Estimate cost of reading table. */
|
||||
tmp= s->table->file->scan_time();
|
||||
tmp= s->read_time;
|
||||
if ((s->table->map & join->outer_join) || disable_jbuf) // Can't use join cache
|
||||
{
|
||||
/*
|
||||
@@ -4743,6 +4772,7 @@ best_access_path(JOIN *join,
|
||||
}
|
||||
}
|
||||
|
||||
tmp += s->startup_cost;
|
||||
/*
|
||||
We estimate the cost of evaluating WHERE clause for found records
|
||||
as record_count * rnd_records / TIME_FOR_COMPARE. This cost plus
|
||||
@@ -6688,12 +6718,12 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond)
|
||||
the index if we are using limit and this is the first table
|
||||
*/
|
||||
|
||||
if ((cond &&
|
||||
(!tab->keys.is_subset(tab->const_keys) && i > 0)) ||
|
||||
if (!tab->table->is_filled_at_execution() &&
|
||||
((cond && (!tab->keys.is_subset(tab->const_keys) && i > 0)) ||
|
||||
(!tab->const_keys.is_clear_all() && i == join->const_tables &&
|
||||
join->unit->select_limit_cnt <
|
||||
join->best_positions[i].records_read &&
|
||||
!(join->select_options & OPTION_FOUND_ROWS)))
|
||||
!(join->select_options & OPTION_FOUND_ROWS))))
|
||||
{
|
||||
/* Join with outer join condition */
|
||||
COND *orig_cond=sel->cond;
|
||||
@@ -7684,6 +7714,12 @@ void JOIN_TAB::cleanup()
|
||||
table->file->extra(HA_EXTRA_NO_KEYREAD);
|
||||
}
|
||||
table->file->ha_index_or_rnd_end();
|
||||
|
||||
if (table->pos_in_table_list &&
|
||||
table->pos_in_table_list->jtbm_subselect)
|
||||
{
|
||||
table->pos_in_table_list->jtbm_subselect->cleanup();
|
||||
}
|
||||
/*
|
||||
We need to reset this for next select
|
||||
(Tested in part_of_refkey)
|
||||
@@ -9861,16 +9897,10 @@ static uint reset_nj_counters(JOIN *join, List<TABLE_LIST> *join_list)
|
||||
if ((nested_join= table->nested_join))
|
||||
{
|
||||
nested_join->counter= 0;
|
||||
//nested_join->n_tables= my_count_bits(nested_join->used_tables &
|
||||
// ~join->eliminated_tables);
|
||||
nested_join->n_tables= reset_nj_counters(join, &nested_join->join_list);
|
||||
if (!nested_join->n_tables)
|
||||
is_eliminated_nest= TRUE;
|
||||
}
|
||||
//if (!table->table || (table->table->map & ~join->eliminated_tables))
|
||||
//psergey-merge10^
|
||||
//if (!table->table && (table->table->map & ~join->eliminated_tables))
|
||||
//psergey-merge11^
|
||||
if ((!table->table && !is_eliminated_nest) ||
|
||||
(table->table && (table->table->map & ~join->eliminated_tables)))
|
||||
n++;
|
||||
@@ -11396,6 +11426,8 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
|
||||
share->keys=1;
|
||||
share->uniques= test(using_unique_constraint);
|
||||
table->key_info= table->s->key_info= keyinfo;
|
||||
table->keys_in_use_for_query.set_bit(0);
|
||||
share->keys_in_use.set_bit(0);
|
||||
keyinfo->key_part=key_part_info;
|
||||
keyinfo->flags=HA_NOSAME;
|
||||
keyinfo->usable_key_parts=keyinfo->key_parts= param->group_parts;
|
||||
@@ -11411,6 +11443,8 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
|
||||
bool maybe_null=(*cur_group->item)->maybe_null;
|
||||
key_part_info->null_bit=0;
|
||||
key_part_info->field= field;
|
||||
if (cur_group == group)
|
||||
field->key_start.set_bit(0);
|
||||
key_part_info->offset= field->offset(table->record[0]);
|
||||
key_part_info->length= (uint16) field->key_length();
|
||||
key_part_info->type= (uint8) field->key_type();
|
||||
@@ -11481,6 +11515,8 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
|
||||
keyinfo->key_parts * sizeof(KEY_PART_INFO))))
|
||||
goto err;
|
||||
bzero((void*) key_part_info, keyinfo->key_parts * sizeof(KEY_PART_INFO));
|
||||
table->keys_in_use_for_query.set_bit(0);
|
||||
share->keys_in_use.set_bit(0);
|
||||
table->key_info= table->s->key_info= keyinfo;
|
||||
keyinfo->key_part=key_part_info;
|
||||
keyinfo->flags=HA_NOSAME | HA_NULL_ARE_EQUAL;
|
||||
@@ -11519,6 +11555,13 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
|
||||
{
|
||||
key_part_info->null_bit=0;
|
||||
key_part_info->field= *reg_field;
|
||||
(*reg_field)->flags |= PART_KEY_FLAG;
|
||||
if (key_part_info == keyinfo->key_part)
|
||||
(*reg_field)->key_start.set_bit(0);
|
||||
key_part_info->null_bit= (*reg_field)->null_bit;
|
||||
key_part_info->null_offset= (uint) ((*reg_field)->null_ptr -
|
||||
(uchar*) table->record[0]);
|
||||
|
||||
key_part_info->offset= (*reg_field)->offset(table->record[0]);
|
||||
key_part_info->length= (uint16) (*reg_field)->pack_length();
|
||||
/* TODO:
|
||||
@@ -12805,6 +12848,9 @@ sub_select(JOIN *join,JOIN_TAB *join_tab,bool end_of_records)
|
||||
}
|
||||
join->thd->row_count= 0;
|
||||
|
||||
if (do_jtbm_materialization_if_needed(join_tab))
|
||||
DBUG_RETURN(NESTED_LOOP_ERROR);
|
||||
|
||||
error= (*join_tab->read_first_record)(join_tab);
|
||||
|
||||
if (join_tab->keep_current_rowid)
|
||||
@@ -17943,7 +17989,7 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
|
||||
/* table */
|
||||
int len= my_snprintf(table_name_buffer,
|
||||
sizeof(table_name_buffer)-1,
|
||||
"subselect%d",
|
||||
"SUBQUERY#%d",
|
||||
tab->emb_sj_nest->sj_subq_pred->get_identifier());
|
||||
item_list.push_back(new Item_string(table_name_buffer, len, cs));
|
||||
/* partitions */
|
||||
@@ -18169,7 +18215,7 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
|
||||
if (tab->select && tab->select->quick)
|
||||
examined_rows= tab->select->quick->records;
|
||||
else if (tab->type == JT_NEXT || tab->type == JT_ALL)
|
||||
examined_rows= tab->limit ? tab->limit : tab->table->file->records();
|
||||
examined_rows= tab->limit ? tab->limit : tab->records;
|
||||
else
|
||||
examined_rows=(ha_rows)join->best_positions[i].records_read;
|
||||
|
||||
@@ -18658,6 +18704,14 @@ void TABLE_LIST::print(THD *thd, table_map eliminated_tables, String *str,
|
||||
print_join(thd, eliminated_tables, str, &nested_join->join_list, query_type);
|
||||
str->append(')');
|
||||
}
|
||||
else if (jtbm_subselect)
|
||||
{
|
||||
str->append(STRING_WITH_LEN(" <materialize> ("));
|
||||
subselect_hash_sj_engine *hash_engine;
|
||||
hash_engine= (subselect_hash_sj_engine*)jtbm_subselect->engine;
|
||||
hash_engine->materialize_engine->print(str, query_type);
|
||||
str->append(')');
|
||||
}
|
||||
else
|
||||
{
|
||||
const char *cmp_name; // Name to compare with alias
|
||||
|
@@ -210,7 +210,10 @@ typedef struct st_join_table {
|
||||
method (but not 'index' for some reason), i.e. this matches method which
|
||||
E(#records) is in found_records.
|
||||
*/
|
||||
ha_rows read_time;
|
||||
double read_time;
|
||||
|
||||
/* Startup cost for execution */
|
||||
double startup_cost;
|
||||
|
||||
table_map dependent,key_dependent;
|
||||
uint use_quick,index;
|
||||
@@ -1551,6 +1554,10 @@ public:
|
||||
bool union_part; ///< this subselect is part of union
|
||||
bool optimized; ///< flag to avoid double optimization in EXPLAIN
|
||||
|
||||
/*
|
||||
Subqueries that will need to be converted to semi-join nests, including
|
||||
those converted to jtbm nests. The list is emptied when conversion is done.
|
||||
*/
|
||||
Array<Item_in_subselect> sj_subselects;
|
||||
|
||||
/* Temporary tables used to weed-out semi-join duplicates */
|
||||
|
@@ -5114,6 +5114,12 @@ bool st_table::is_children_attached(void)
|
||||
(parent && parent->children_attached));
|
||||
}
|
||||
|
||||
|
||||
bool st_table::is_filled_at_execution()
|
||||
{
|
||||
return test(pos_in_table_list->jtbm_subselect);
|
||||
}
|
||||
|
||||
/*
|
||||
Cleanup this table for re-execution.
|
||||
|
||||
|
17
sql/table.h
17
sql/table.h
@@ -914,6 +914,13 @@ struct st_table {
|
||||
inline bool needs_reopen_or_name_lock()
|
||||
{ return s->version != refresh_version; }
|
||||
bool is_children_attached(void);
|
||||
|
||||
/*
|
||||
If TRUE, the table is filled at execution phase (and so, the optimizer
|
||||
should not do things like range analysis or constant table detection on
|
||||
it).
|
||||
*/
|
||||
bool is_filled_at_execution();
|
||||
};
|
||||
|
||||
enum enum_schema_table_state
|
||||
@@ -1131,7 +1138,7 @@ class Item_in_subselect;
|
||||
1) table (TABLE_LIST::view == NULL)
|
||||
- base table
|
||||
(TABLE_LIST::derived == NULL)
|
||||
- subquery - TABLE_LIST::table is a temp table
|
||||
- FROM-clause subquery - TABLE_LIST::table is a temp table
|
||||
(TABLE_LIST::derived != NULL)
|
||||
- information schema table
|
||||
(TABLE_LIST::schema_table != NULL)
|
||||
@@ -1150,6 +1157,8 @@ class Item_in_subselect;
|
||||
(TABLE_LIST::natural_join != NULL)
|
||||
- JOIN ... USING
|
||||
(TABLE_LIST::join_using_fields != NULL)
|
||||
- semi-join nest (sj_on_expr!= NULL && sj_subq_pred!=NULL)
|
||||
4) jtbm semi-join (jtbm_subselect != NULL)
|
||||
*/
|
||||
|
||||
class Index_hint;
|
||||
@@ -1193,7 +1202,13 @@ struct TABLE_LIST
|
||||
table_map sj_inner_tables;
|
||||
/* Number of IN-compared expressions */
|
||||
uint sj_in_exprs;
|
||||
|
||||
/* If this is a non-jtbm semi-join nest: corresponding subselect predicate */
|
||||
Item_in_subselect *sj_subq_pred;
|
||||
|
||||
/* If this is a jtbm semi-join object: corresponding subselect predicate */
|
||||
Item_in_subselect *jtbm_subselect;
|
||||
|
||||
SJ_MATERIALIZATION_INFO *sj_mat_info;
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user