Merge 5.3->5.5.
This commit is contained in:
commit
8b469eb515
@ -1468,14 +1468,14 @@ WHERE (t2.a ,t1.b) NOT IN (SELECT DISTINCT c,a FROM t3 t);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join)
|
||||
2 DEPENDENT SUBQUERY t ref PRIMARY,c c 4 func 2 Using where; Using index
|
||||
2 DEPENDENT SUBQUERY t eq_ref PRIMARY,c PRIMARY 4 func 1 Using where
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 , t2
|
||||
WHERE (t2.a ,t1.b) NOT IN (SELECT DISTINCT c,a FROM (SELECT * FROM t3) t);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join)
|
||||
2 DEPENDENT SUBQUERY t3 ref PRIMARY,c c 4 func 2 Using where; Using index
|
||||
2 DEPENDENT SUBQUERY t3 eq_ref PRIMARY,c PRIMARY 4 func 1 Using where
|
||||
SELECT * FROM t1 , t2
|
||||
WHERE (t2.a ,t1.b) NOT IN (SELECT DISTINCT c,a FROM (SELECT * FROM t3) t);
|
||||
b a
|
||||
|
@ -1845,7 +1845,7 @@ NULL
|
||||
EXPLAIN EXTENDED
|
||||
SELECT MAX(a) FROM t1 WHERE (1,2) IN (SELECT a,b FROM t2 WHERE b<5) and a<10;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 10 func,func 1 100.00
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 8 func,func 1 100.00
|
||||
1 PRIMARY t1 range a a 4 NULL 4 100.00 Using where; Using index; Using join buffer (flat, BNL join)
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 5 100.00 Using where
|
||||
Warnings:
|
||||
|
@ -2407,7 +2407,7 @@ 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 <subquery2> ALL distinct_key NULL NULL NULL 8 Using where
|
||||
1 PRIMARY <subquery2> ALL distinct_key NULL NULL NULL 8
|
||||
1 PRIMARY t1_outer ref a a 5 <subquery2>.max(b) 2 Using index
|
||||
2 MATERIALIZED t1 range NULL a 5 NULL 8 Using index for group-by
|
||||
EXPLAIN SELECT 1 FROM t1 AS t1_outer GROUP BY a HAVING
|
||||
|
@ -573,6 +573,17 @@ f1
|
||||
DROP TABLE t1,t2;
|
||||
End of 5.1 tests
|
||||
#
|
||||
# LP bug:938518 HAVING does not reject the result of aggregation
|
||||
#
|
||||
CREATE TABLE t1 (pk INT PRIMARY KEY, a INT);
|
||||
INSERT INTO t1 VALUES (2,7), (4,7), (6,2), (17,0);
|
||||
SELECT MIN(t.pk) FROM t1, t1 as t WHERE t1.pk = 1;
|
||||
MIN(t.pk)
|
||||
NULL
|
||||
SELECT MIN(t.pk) FROM t1, t1 as t WHERE t1.pk = 1 HAVING MIN(t.pk) < 10;
|
||||
MIN(t.pk)
|
||||
drop table t1;
|
||||
#
|
||||
# LP bug #791761: MAX over an empty join + HAVING
|
||||
#
|
||||
CREATE TABLE t1 (a int, b int , KEY (b)) ;
|
||||
@ -596,3 +607,33 @@ SELECT MAX(t1.b) AS f FROM t1 JOIN t2 ON t2.a != 0
|
||||
WHERE (SELECT f3 FROM t3) <> 0 HAVING f <> 6 ;
|
||||
f
|
||||
DROP TABLE t1,t2,t3;
|
||||
#
|
||||
# LP bug:806955 HAVING not observed with aggregate +subquery
|
||||
#
|
||||
CREATE TABLE t1 (f3 int, f10 varchar(1), f11 int, KEY (f10) );
|
||||
INSERT INTO t1 VALUES (NULL,'a',0),(8,'b',0);
|
||||
CREATE TABLE t2 (f2 int);
|
||||
INSERT INTO t2 VALUES (7);
|
||||
CREATE TABLE t3 (f3 int);
|
||||
INSERT INTO t3 VALUES (0),(8);
|
||||
set @save_optimizer_switch=@@optimizer_switch;
|
||||
set optimizer_switch='semijoin=off,materialization=off';
|
||||
SELECT MIN( t1.f10 ) AS field1
|
||||
FROM t1 , t2
|
||||
WHERE t2.f2 IN ( SELECT f3 FROM t3 )
|
||||
HAVING field1 < 's';
|
||||
field1
|
||||
explain extended
|
||||
SELECT MIN( t1.f10 ) AS field1
|
||||
FROM t1 , t2
|
||||
WHERE t2.f2 IN ( SELECT f3 FROM t3 )
|
||||
HAVING field1 < 's';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t2 system NULL NULL NULL NULL 1 100.00
|
||||
1 PRIMARY t1 index NULL f10 4 NULL 2 100.00 Using index
|
||||
2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select min(`test`.`t1`.`f10`) AS `field1` from `test`.`t1` where <expr_cache><7>(<in_optimizer>(7,<exists>(select `test`.`t3`.`f3` from `test`.`t3` where (<cache>(7) = `test`.`t3`.`f3`)))) having (<cache>(`field1`) < 's')
|
||||
set optimizer_switch=@save_optimizer_switch;
|
||||
drop table t1,t2,t3;
|
||||
End of 5.2 tests
|
||||
|
@ -1277,6 +1277,55 @@ Handler_read_rnd_next 1
|
||||
DROP TABLE t1, t2;
|
||||
End of 5.1 tests
|
||||
#
|
||||
# Bug #43368: STRAIGHT_JOIN DOESN'T WORK FOR NESTED JOINS
|
||||
#
|
||||
create table t1(c1 int primary key, c2 char(10)) engine=myisam;
|
||||
create table t2(c1 int primary key, c2 char(10), ref_t1 int) engine=myisam;
|
||||
create table t3(c1 int primary key, c2 char(10), ref_t1 int) engine=myisam;
|
||||
create table t4(c1 int primary key, c2 char(10), ref_t1 int) engine=myisam;
|
||||
insert into t1 values(1,'a');
|
||||
insert into t2 values(1,'a', 1);
|
||||
insert into t3 values(1,'a', 1);
|
||||
insert into t3 values(2,'b',2);
|
||||
insert into t4 values(1,'a', 1);
|
||||
insert into t4 values(2,'a', 2);
|
||||
insert into t4 values(3,'a', 3);
|
||||
insert into t4 values(4,'a', 4);
|
||||
insert into t1 values(2,'b');
|
||||
insert into t1 values(3,'c');
|
||||
EXPLAIN
|
||||
SELECT *
|
||||
FROM t4 JOIN
|
||||
(t1 JOIN t3 ON t3.ref_t1=t1.c1 JOIN t2 ON t2.ref_t1=t1.c1)
|
||||
ON t4.ref_t1=t1.c1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 system NULL NULL NULL NULL 1
|
||||
1 SIMPLE t1 const PRIMARY PRIMARY 4 const 1
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 2 Using where
|
||||
1 SIMPLE t4 ALL NULL NULL NULL NULL 4 Using where; Using join buffer (flat, BNL join)
|
||||
EXPLAIN
|
||||
SELECT STRAIGHT_JOIN *
|
||||
FROM t4 JOIN
|
||||
(t1 JOIN t3 ON t3.ref_t1=t1.c1 JOIN t2 ON t2.ref_t1=t1.c1)
|
||||
ON t4.ref_t1=t1.c1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t4 ALL NULL NULL NULL NULL 4
|
||||
1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 3 Using where; Using join buffer (flat, BNL join)
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (incremental, BNL join)
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 1 Using where; Using join buffer (incremental, BNL join)
|
||||
EXPLAIN
|
||||
SELECT *
|
||||
FROM t4 STRAIGHT_JOIN
|
||||
(t1 JOIN t3 ON t3.ref_t1=t1.c1 JOIN t2 ON t2.ref_t1=t1.c1)
|
||||
ON t4.ref_t1=t1.c1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t4 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 1 Using where; Using join buffer (flat, BNL join)
|
||||
1 SIMPLE t1 eq_ref PRIMARY PRIMARY 4 test.t4.ref_t1 1
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join)
|
||||
drop table t1,t2,t3,t4;
|
||||
End of 5.2 tests
|
||||
#
|
||||
# BUG#724275: Crash in JOIN::optimize in maria-5.3
|
||||
#
|
||||
create table t1 (a int);
|
||||
|
@ -1905,4 +1905,88 @@ b b a b
|
||||
DEALLOCATE PREPARE stmt;
|
||||
SET SESSION join_cache_level=default;
|
||||
DROP TABLE t1,t2,t3;
|
||||
#
|
||||
# LP bug #943543: LEFT JOIN converted to JOIN with
|
||||
# ORed IS NULL(primary key) in WHERE clause
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
a int, b int NOT NULL, pk int NOT NULL,
|
||||
PRIMARY KEY (pk), INDEX idx(b)
|
||||
);
|
||||
INSERT INTO t1 VALUES
|
||||
(NULL,1,1), (6,2,2), (5,3,3), (NULL,4,4),
|
||||
(1,9,6), (8,5,7), (NULL,8,8), (8,1,5);
|
||||
CREATE TABLE t2 (pk int PRIMARY KEY);
|
||||
INSERT INTO t2 VALUES (3), (8), (5);
|
||||
EXPLAIN EXTENDED
|
||||
SELECT t1.pk FROM t2 JOIN t1 ON t2.pk = t1.a
|
||||
WHERE t1.b BETWEEN 5 AND 6 AND t1.pk IS NULL OR t1.pk = 5
|
||||
ORDER BY t1.pk;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 const PRIMARY PRIMARY 4 const 1 100.00
|
||||
1 SIMPLE t2 const PRIMARY PRIMARY 4 const 1 100.00 Using index
|
||||
Warnings:
|
||||
Note 1003 select 5 AS `pk` from `test`.`t2` join `test`.`t1` where (1) order by 5
|
||||
SELECT t1.pk FROM t2 JOIN t1 ON t2.pk = t1.a
|
||||
WHERE t1.b BETWEEN 5 AND 6 AND t1.pk IS NULL OR t1.pk = 5
|
||||
ORDER BY t1.pk;
|
||||
pk
|
||||
5
|
||||
EXPLAIN EXTENDED
|
||||
SELECT t1.pk FROM t2 LEFT JOIN t1 ON t2.pk = t1.a
|
||||
WHERE t1.b BETWEEN 5 AND 6 AND t1.pk IS NULL OR t1.pk = 5
|
||||
ORDER BY t1.pk;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 const PRIMARY,idx PRIMARY 4 const 1 100.00
|
||||
1 SIMPLE t2 const PRIMARY PRIMARY 4 const 1 100.00 Using index
|
||||
Warnings:
|
||||
Note 1003 select 5 AS `pk` from `test`.`t2` join `test`.`t1` where ((((1 between 5 and 6) and isnull(5)) or 1)) order by 5
|
||||
SELECT t1.pk FROM t2 LEFT JOIN t1 ON t2.pk = t1.a
|
||||
WHERE t1.b BETWEEN 5 AND 6 AND t1.pk IS NULL OR t1.pk = 5
|
||||
ORDER BY t1.pk;
|
||||
pk
|
||||
5
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 (c int, d int, KEY (c));
|
||||
INSERT INTO t2 VALUES
|
||||
(3,30), (8,88), (5,50), (8,81),
|
||||
(4,40), (9,90), (7,70), (9,90),
|
||||
(13,130), (18,188), (15,150), (18,181),
|
||||
(14,140), (19,190), (17,170), (19,190);
|
||||
INSERT INTO t1 VALUES (8,5,9);
|
||||
EXPLAIN EXTENDED
|
||||
SELECT t1.b, t2.c, t2.d FROM t2 JOIN t1 ON t2.c = t1.a
|
||||
WHERE t1.pk BETWEEN 5 AND 6 AND t1.b IS NULL OR t1.b = 5
|
||||
ORDER BY t1.b;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ref idx idx 4 const 2 100.00 Using where
|
||||
1 SIMPLE t2 ref c c 5 test.t1.a 2 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2` join `test`.`t1` where ((`test`.`t2`.`c` = `test`.`t1`.`a`) and (`test`.`t1`.`b` = 5)) order by `test`.`t1`.`b`
|
||||
SELECT t1.b, t2.c, t2.d FROM t2 JOIN t1 ON t2.c = t1.a
|
||||
WHERE t1.pk BETWEEN 5 AND 6 AND t1.b IS NULL OR t1.b = 5
|
||||
ORDER BY t1.b;
|
||||
b c d
|
||||
5 8 88
|
||||
5 8 81
|
||||
5 8 88
|
||||
5 8 81
|
||||
EXPLAIN EXTENDED
|
||||
SELECT t1.b, t2.c, t2.d FROM t2 LEFT JOIN t1 ON t2.c = t1.a
|
||||
WHERE t1.pk BETWEEN 5 AND 6 AND t1.b IS NULL OR t1.b = 5
|
||||
ORDER BY t1.b;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ref PRIMARY,idx idx 4 const 2 100.00 Using where; Using filesort
|
||||
1 SIMPLE t2 ref c c 5 test.t1.a 2 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2` join `test`.`t1` where ((`test`.`t2`.`c` = `test`.`t1`.`a`) and (((`test`.`t1`.`pk` between 5 and 6) and isnull(`test`.`t1`.`b`)) or (`test`.`t1`.`b` = 5))) order by `test`.`t1`.`b`
|
||||
SELECT t1.b, t2.c, t2.d FROM t2 LEFT JOIN t1 ON t2.c = t1.a
|
||||
WHERE t1.pk BETWEEN 5 AND 6 AND t1.b IS NULL OR t1.b = 5
|
||||
ORDER BY t1.b;
|
||||
b c d
|
||||
5 8 88
|
||||
5 8 81
|
||||
5 8 88
|
||||
5 8 81
|
||||
DROP TABLE t1,t2;
|
||||
SET optimizer_switch=@save_optimizer_switch;
|
||||
|
@ -40,8 +40,7 @@ WHERE t1.col_int_key BETWEEN 5 AND 6
|
||||
AND t1.pk IS NULL OR t1.pk IN (5)
|
||||
ORDER BY pk;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 const PRIMARY,col_int_key PRIMARY 4 const 1 Using where
|
||||
1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.col_int 1 Using index
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
|
||||
SELECT t1.pk
|
||||
FROM t2 LEFT JOIN t1 ON t2.pk = t1.col_int
|
||||
@ -60,3 +59,130 @@ WHERE (t1.b NOT BETWEEN 1 AND 7 OR t1.a IS NULL AND t1.b = t2.b) AND t2.b = 4
|
||||
GROUP BY 1;
|
||||
a
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
Bug #59487: WRONG RESULT WITH STRAIGHT_JOIN AND RIGHT JOIN
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
pk int(11) NOT NULL,
|
||||
col_varchar_10_latin1_key varchar(10) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
INSERT INTO t1 VALUES (1,'1');
|
||||
CREATE TABLE t2 (
|
||||
pk int(11) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
INSERT INTO t2 VALUES (1);
|
||||
CREATE TABLE t3 (
|
||||
pk int(11) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
INSERT INTO t3 VALUES (1);
|
||||
CREATE TABLE t4 (
|
||||
pk int(11) NOT NULL,
|
||||
col_int int(11) DEFAULT NULL,
|
||||
col_int_key int(11) DEFAULT NULL,
|
||||
col_varchar_10_latin1_key varchar(10) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
INSERT INTO t4 VALUES (1,1,1,'1');
|
||||
CREATE TABLE t5 (
|
||||
col_int int(11) DEFAULT NULL,
|
||||
col_varchar_10_utf8_key varchar(10) CHARACTER SET utf8 DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
INSERT INTO t5 VALUES (1,'1');
|
||||
CREATE TABLE t6 (
|
||||
col_int_key int(11) DEFAULT NULL,
|
||||
col_varchar_10_latin1_key varchar(10) DEFAULT NULL,
|
||||
pk int(11) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
INSERT INTO t6 VALUES (1,'1',1);
|
||||
SELECT STRAIGHT_JOIN t6a.pk, t2.pk
|
||||
FROM t6 AS t6a
|
||||
LEFT JOIN
|
||||
(
|
||||
t2
|
||||
RIGHT JOIN
|
||||
(
|
||||
(t1 LEFT JOIN (t4 JOIN t3 ON t4.col_int) ON t4.col_int_key = t1.pk)
|
||||
LEFT JOIN
|
||||
(t5 JOIN t6 AS t6b
|
||||
ON t5.col_varchar_10_utf8_key = t6b.col_varchar_10_latin1_key)
|
||||
ON t1.pk = t5.col_int
|
||||
)
|
||||
ON t4.col_varchar_10_latin1_key = t1.col_varchar_10_latin1_key
|
||||
AND t5.col_varchar_10_utf8_key = 0
|
||||
)
|
||||
ON t6a.pk IS TRUE
|
||||
WHERE t6b.col_int_key IS TRUE;
|
||||
pk pk
|
||||
1 NULL
|
||||
EXPLAIN SELECT STRAIGHT_JOIN t6a.pk, t2.pk
|
||||
FROM t6 AS t6a
|
||||
LEFT JOIN
|
||||
(
|
||||
t2
|
||||
RIGHT JOIN
|
||||
(
|
||||
(t1 LEFT JOIN (t4 JOIN t3 ON t4.col_int) ON t4.col_int_key = t1.pk)
|
||||
LEFT JOIN
|
||||
(t5 JOIN t6 AS t6b
|
||||
ON t5.col_varchar_10_utf8_key = t6b.col_varchar_10_latin1_key)
|
||||
ON t1.pk = t5.col_int
|
||||
)
|
||||
ON t4.col_varchar_10_latin1_key = t1.col_varchar_10_latin1_key
|
||||
AND t5.col_varchar_10_utf8_key = 0
|
||||
)
|
||||
ON t6a.pk IS TRUE
|
||||
WHERE t6b.col_int_key IS TRUE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6a ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 1 Using join buffer (flat, BNL join)
|
||||
1 SIMPLE t4 ALL NULL NULL NULL NULL 1 Using where; Using join buffer (incremental, BNL join)
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 1 Using join buffer (incremental, BNL join)
|
||||
1 SIMPLE t5 ALL NULL NULL NULL NULL 1 Using where; Using join buffer (incremental, BNL join)
|
||||
1 SIMPLE t6b ALL NULL NULL NULL NULL 1 Using where; Using join buffer (incremental, BNL join)
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 1 Using where; Using join buffer (incremental, BNL join)
|
||||
SELECT t6a.pk, t2.pk
|
||||
FROM t6 AS t6a
|
||||
LEFT JOIN
|
||||
(
|
||||
t2
|
||||
RIGHT JOIN
|
||||
(
|
||||
(t1 LEFT JOIN (t4 JOIN t3 ON t4.col_int) ON t4.col_int_key = t1.pk)
|
||||
LEFT JOIN
|
||||
(t5 JOIN t6 AS t6b
|
||||
ON t5.col_varchar_10_utf8_key = t6b.col_varchar_10_latin1_key)
|
||||
ON t1.pk = t5.col_int
|
||||
)
|
||||
ON t4.col_varchar_10_latin1_key = t1.col_varchar_10_latin1_key
|
||||
AND t5.col_varchar_10_utf8_key = 0
|
||||
)
|
||||
ON t6a.pk IS TRUE
|
||||
WHERE t6b.col_int_key IS TRUE;
|
||||
pk pk
|
||||
1 NULL
|
||||
EXPLAIN SELECT t6a.pk, t2.pk
|
||||
FROM t6 AS t6a
|
||||
LEFT JOIN
|
||||
(
|
||||
t2
|
||||
RIGHT JOIN
|
||||
(
|
||||
(t1 LEFT JOIN (t4 JOIN t3 ON t4.col_int) ON t4.col_int_key = t1.pk)
|
||||
LEFT JOIN
|
||||
(t5 JOIN t6 AS t6b
|
||||
ON t5.col_varchar_10_utf8_key = t6b.col_varchar_10_latin1_key)
|
||||
ON t1.pk = t5.col_int
|
||||
)
|
||||
ON t4.col_varchar_10_latin1_key = t1.col_varchar_10_latin1_key
|
||||
AND t5.col_varchar_10_utf8_key = 0
|
||||
)
|
||||
ON t6a.pk IS TRUE
|
||||
WHERE t6b.col_int_key IS TRUE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6a ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 1 Using join buffer (flat, BNL join)
|
||||
1 SIMPLE t4 ALL NULL NULL NULL NULL 1 Using where; Using join buffer (incremental, BNL join)
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 1 Using join buffer (incremental, BNL join)
|
||||
1 SIMPLE t5 ALL NULL NULL NULL NULL 1 Using where; Using join buffer (incremental, BNL join)
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 1 Using where; Using join buffer (incremental, BNL join)
|
||||
1 SIMPLE t6b ALL NULL NULL NULL NULL 1 Using where; Using join buffer (incremental, BNL join)
|
||||
drop table t1,t2,t3,t4,t5,t6;
|
||||
|
@ -1916,6 +1916,90 @@ b b a b
|
||||
DEALLOCATE PREPARE stmt;
|
||||
SET SESSION join_cache_level=default;
|
||||
DROP TABLE t1,t2,t3;
|
||||
#
|
||||
# LP bug #943543: LEFT JOIN converted to JOIN with
|
||||
# ORed IS NULL(primary key) in WHERE clause
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
a int, b int NOT NULL, pk int NOT NULL,
|
||||
PRIMARY KEY (pk), INDEX idx(b)
|
||||
);
|
||||
INSERT INTO t1 VALUES
|
||||
(NULL,1,1), (6,2,2), (5,3,3), (NULL,4,4),
|
||||
(1,9,6), (8,5,7), (NULL,8,8), (8,1,5);
|
||||
CREATE TABLE t2 (pk int PRIMARY KEY);
|
||||
INSERT INTO t2 VALUES (3), (8), (5);
|
||||
EXPLAIN EXTENDED
|
||||
SELECT t1.pk FROM t2 JOIN t1 ON t2.pk = t1.a
|
||||
WHERE t1.b BETWEEN 5 AND 6 AND t1.pk IS NULL OR t1.pk = 5
|
||||
ORDER BY t1.pk;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 const PRIMARY PRIMARY 4 const 1 100.00
|
||||
1 SIMPLE t2 const PRIMARY PRIMARY 4 const 1 100.00 Using index
|
||||
Warnings:
|
||||
Note 1003 select 5 AS `pk` from `test`.`t2` join `test`.`t1` where (1) order by 5
|
||||
SELECT t1.pk FROM t2 JOIN t1 ON t2.pk = t1.a
|
||||
WHERE t1.b BETWEEN 5 AND 6 AND t1.pk IS NULL OR t1.pk = 5
|
||||
ORDER BY t1.pk;
|
||||
pk
|
||||
5
|
||||
EXPLAIN EXTENDED
|
||||
SELECT t1.pk FROM t2 LEFT JOIN t1 ON t2.pk = t1.a
|
||||
WHERE t1.b BETWEEN 5 AND 6 AND t1.pk IS NULL OR t1.pk = 5
|
||||
ORDER BY t1.pk;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 const PRIMARY,idx PRIMARY 4 const 1 100.00
|
||||
1 SIMPLE t2 const PRIMARY PRIMARY 4 const 1 100.00 Using index
|
||||
Warnings:
|
||||
Note 1003 select 5 AS `pk` from `test`.`t2` join `test`.`t1` where ((((1 between 5 and 6) and isnull(5)) or 1)) order by 5
|
||||
SELECT t1.pk FROM t2 LEFT JOIN t1 ON t2.pk = t1.a
|
||||
WHERE t1.b BETWEEN 5 AND 6 AND t1.pk IS NULL OR t1.pk = 5
|
||||
ORDER BY t1.pk;
|
||||
pk
|
||||
5
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 (c int, d int, KEY (c));
|
||||
INSERT INTO t2 VALUES
|
||||
(3,30), (8,88), (5,50), (8,81),
|
||||
(4,40), (9,90), (7,70), (9,90),
|
||||
(13,130), (18,188), (15,150), (18,181),
|
||||
(14,140), (19,190), (17,170), (19,190);
|
||||
INSERT INTO t1 VALUES (8,5,9);
|
||||
EXPLAIN EXTENDED
|
||||
SELECT t1.b, t2.c, t2.d FROM t2 JOIN t1 ON t2.c = t1.a
|
||||
WHERE t1.pk BETWEEN 5 AND 6 AND t1.b IS NULL OR t1.b = 5
|
||||
ORDER BY t1.b;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ref idx idx 4 const 2 100.00 Using where
|
||||
1 SIMPLE t2 ref c c 5 test.t1.a 2 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2` join `test`.`t1` where ((`test`.`t2`.`c` = `test`.`t1`.`a`) and (`test`.`t1`.`b` = 5)) order by `test`.`t1`.`b`
|
||||
SELECT t1.b, t2.c, t2.d FROM t2 JOIN t1 ON t2.c = t1.a
|
||||
WHERE t1.pk BETWEEN 5 AND 6 AND t1.b IS NULL OR t1.b = 5
|
||||
ORDER BY t1.b;
|
||||
b c d
|
||||
5 8 88
|
||||
5 8 81
|
||||
5 8 88
|
||||
5 8 81
|
||||
EXPLAIN EXTENDED
|
||||
SELECT t1.b, t2.c, t2.d FROM t2 LEFT JOIN t1 ON t2.c = t1.a
|
||||
WHERE t1.pk BETWEEN 5 AND 6 AND t1.b IS NULL OR t1.b = 5
|
||||
ORDER BY t1.b;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ref PRIMARY,idx idx 4 const 2 100.00 Using where; Using filesort
|
||||
1 SIMPLE t2 ref c c 5 test.t1.a 2 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2` join `test`.`t1` where ((`test`.`t2`.`c` = `test`.`t1`.`a`) and (((`test`.`t1`.`pk` between 5 and 6) and isnull(`test`.`t1`.`b`)) or (`test`.`t1`.`b` = 5))) order by `test`.`t1`.`b`
|
||||
SELECT t1.b, t2.c, t2.d FROM t2 LEFT JOIN t1 ON t2.c = t1.a
|
||||
WHERE t1.pk BETWEEN 5 AND 6 AND t1.b IS NULL OR t1.b = 5
|
||||
ORDER BY t1.b;
|
||||
b c d
|
||||
5 8 88
|
||||
5 8 81
|
||||
5 8 88
|
||||
5 8 81
|
||||
DROP TABLE t1,t2;
|
||||
SET optimizer_switch=@save_optimizer_switch;
|
||||
set join_cache_level=default;
|
||||
show variables like 'join_cache_level';
|
||||
|
@ -390,6 +390,8 @@ col_varchar_1024_latin1_key varchar(1024) DEFAULT NULL,
|
||||
PRIMARY KEY (pk),
|
||||
KEY col_varchar_1024_latin1_key (col_varchar_1024_latin1_key)
|
||||
) ENGINE=Aria;
|
||||
Warnings:
|
||||
Warning 1071 Specified key was too long; max key length is 1000 bytes
|
||||
INSERT INTO t1 VALUES
|
||||
(1,'z'), (2,'abcdefjhjkl'), (3,'in'), (4,'abcdefjhjkl'), (6,'abcdefjhjkl'),
|
||||
(11,'zx'), (12,'abcdefjhjm'), (13,'jn'), (14,'abcdefjhjp'), (16,'abcdefjhjr');
|
||||
@ -403,7 +405,7 @@ WHERE
|
||||
table1.col_varchar_1024_latin1_key = table2.col_varchar_10_latin1 AND table1.pk<>0 ;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE table2 ALL NULL NULL NULL NULL 2 Using where
|
||||
1 SIMPLE table1 ref PRIMARY,col_varchar_1024_latin1_key col_varchar_1024_latin1_key 1027 test.table2.col_varchar_10_latin1 2 Using index condition(BKA); Using where; Using join buffer (flat, BKA join); Key-ordered Rowid-ordered scan
|
||||
1 SIMPLE table1 ref PRIMARY,col_varchar_1024_latin1_key col_varchar_1024_latin1_key 1003 test.table2.col_varchar_10_latin1 2 Using where
|
||||
SELECT count(*)
|
||||
FROM t1 AS table1, t2 AS table2
|
||||
WHERE
|
||||
@ -425,6 +427,8 @@ f4 varchar(1024) COLLATE utf8_bin,
|
||||
f5 varchar(1024) COLLATE latin1_bin,
|
||||
KEY (f5)
|
||||
) ENGINE=Aria TRANSACTIONAL=0 ;
|
||||
Warnings:
|
||||
Warning 1071 Specified key was too long; max key length is 1000 bytes
|
||||
# Fill the table with some data
|
||||
SELECT alias2.* , alias1.f2
|
||||
FROM
|
||||
|
@ -4891,10 +4891,10 @@ SET SESSION join_buffer_size = 2048;
|
||||
EXPLAIN
|
||||
SELECT STRAIGHT_JOIN * FROM t2, (t1 LEFT JOIN (t3,t4) ON t1.f1 = t4.f1), t5, t6;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 12
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 1 Using join buffer (flat, BNL join)
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t4 eq_ref PRIMARY PRIMARY 4 const 1
|
||||
1 SIMPLE t4 eq_ref PRIMARY PRIMARY 4 test.t1.f1 1
|
||||
1 SIMPLE t5 ALL NULL NULL NULL NULL 2 Using join buffer (flat, BNL join)
|
||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 2 Using join buffer (flat, BNL join)
|
||||
SELECT STRAIGHT_JOIN * FROM t2, (t1 LEFT JOIN (t3,t4) ON t1.f1 = t4.f1), t5, t6;
|
||||
|
@ -4902,10 +4902,10 @@ SET SESSION join_buffer_size = 2048;
|
||||
EXPLAIN
|
||||
SELECT STRAIGHT_JOIN * FROM t2, (t1 LEFT JOIN (t3,t4) ON t1.f1 = t4.f1), t5, t6;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 12
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 1 Using where; Using join buffer (flat, BNL join)
|
||||
1 SIMPLE t4 eq_ref PRIMARY PRIMARY 4 const 1 Using join buffer (incremental, BKA join); Key-ordered Rowid-ordered scan
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 1 Using join buffer (flat, BNL join)
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 1 Using where; Using join buffer (incremental, BNL join)
|
||||
1 SIMPLE t4 eq_ref PRIMARY PRIMARY 4 test.t1.f1 1 Using join buffer (incremental, BKA join); Key-ordered Rowid-ordered scan
|
||||
1 SIMPLE t5 ALL NULL NULL NULL NULL 2 Using join buffer (incremental, BNL join)
|
||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 2 Using join buffer (incremental, BNL join)
|
||||
SELECT STRAIGHT_JOIN * FROM t2, (t1 LEFT JOIN (t3,t4) ON t1.f1 = t4.f1), t5, t6;
|
||||
|
@ -4891,10 +4891,10 @@ SET SESSION join_buffer_size = 2048;
|
||||
EXPLAIN
|
||||
SELECT STRAIGHT_JOIN * FROM t2, (t1 LEFT JOIN (t3,t4) ON t1.f1 = t4.f1), t5, t6;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 12
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 1 Using join buffer (flat, BNL join)
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t4 eq_ref PRIMARY PRIMARY 4 const 1
|
||||
1 SIMPLE t4 eq_ref PRIMARY PRIMARY 4 test.t1.f1 1
|
||||
1 SIMPLE t5 ALL NULL NULL NULL NULL 2 Using join buffer (flat, BNL join)
|
||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 2 Using join buffer (flat, BNL join)
|
||||
SELECT STRAIGHT_JOIN * FROM t2, (t1 LEFT JOIN (t3,t4) ON t1.f1 = t4.f1), t5, t6;
|
||||
|
@ -2973,7 +2973,7 @@ Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two`,<expr_cac
|
||||
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
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 10 func,func 1 100.00
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 8 func,func 1 100.00
|
||||
2 MATERIALIZED 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` semi join (`test`.`t2`) where ((`test`.`t2`.`flag` = 'N'))
|
||||
@ -3563,7 +3563,7 @@ 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 <subquery2> eq_ref distinct_key distinct_key 23 test.t1.a,test.t1.b 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 21 test.t1.a,test.t1.b 1
|
||||
2 MATERIALIZED t1 ALL NULL NULL NULL NULL 9 Using temporary
|
||||
ALTER TABLE t1 ADD INDEX(a);
|
||||
SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
|
||||
@ -3575,7 +3575,7 @@ 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 a NULL NULL NULL 9 Using where
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 23 test.t1.a,test.t1.b 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 21 test.t1.a,test.t1.b 1
|
||||
2 MATERIALIZED t1 ALL NULL NULL NULL NULL 9 Using temporary
|
||||
DROP TABLE t1;
|
||||
create table t1( f1 int,f2 int);
|
||||
@ -4524,14 +4524,14 @@ SET @save_join_cache_level=@@join_cache_level;
|
||||
SET join_cache_level=0;
|
||||
EXPLAIN EXTENDED SELECT 1 FROM t1 WHERE 1 IN (SELECT min(a) FROM t1 GROUP BY a);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY <subquery2> const distinct_key distinct_key 5 const 1 100.00
|
||||
1 PRIMARY <subquery2> const distinct_key distinct_key 4 const 1 100.00
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
2 MATERIALIZED t1 ALL NULL NULL NULL NULL 2 100.00 Using temporary
|
||||
Warnings:
|
||||
Note 1003 select 1 AS `1` from <materialize> (select min(`test`.`t1`.`a`) from `test`.`t1` group by `test`.`t1`.`a`) join `test`.`t1` where (`<subquery2>`.`min(a)` = 1)
|
||||
EXPLAIN EXTENDED SELECT 1 FROM t1 WHERE 1 IN (SELECT min(a) FROM t1 WHERE a > 3 GROUP BY a);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY <subquery2> const distinct_key distinct_key 5 const 1 100.00
|
||||
1 PRIMARY <subquery2> const distinct_key distinct_key 4 const 1 100.00
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
2 MATERIALIZED t1 ALL NULL NULL NULL NULL 2 100.00 Using where; Using temporary
|
||||
Warnings:
|
||||
@ -5984,7 +5984,7 @@ WHERE col_varchar_nokey IN
|
||||
(SELECT col_varchar_key FROM it1 WHERE col_int_key IS NULL);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY ot system NULL NULL NULL NULL 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED it1 ref idx_cvk_cik idx_cvk_cik 9 const,const 1 Using where; Using index
|
||||
SELECT col_int_nokey FROM ot
|
||||
WHERE col_varchar_nokey IN
|
||||
@ -5997,7 +5997,7 @@ WHERE (col_varchar_nokey, 'x') IN
|
||||
(SELECT col_varchar_key, col_varchar_key2 FROM it2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY ot system NULL NULL NULL NULL 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 10 func,func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 8 func,func 1
|
||||
2 MATERIALIZED it2 ref idx_cvk_cvk2_cik,idx_cvk_cik idx_cvk_cvk2_cik 8 const,const 1 Using where; Using index
|
||||
SELECT col_int_nokey FROM ot
|
||||
WHERE (col_varchar_nokey, 'x') IN
|
||||
|
@ -564,7 +564,7 @@ WHERE ( t1.f10 ) IN ( SELECT f11 FROM t2 GROUP BY f11 ));
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ref f3 f3 5 const 0 Using where
|
||||
2 SUBQUERY t1 ALL NULL NULL NULL NULL 2
|
||||
2 SUBQUERY <subquery3> eq_ref distinct_key distinct_key 5 func 1
|
||||
2 SUBQUERY <subquery3> eq_ref distinct_key distinct_key 4 func 1
|
||||
3 MATERIALIZED t2 ALL NULL NULL NULL NULL 2
|
||||
SELECT * FROM t1
|
||||
WHERE f3 = (
|
||||
@ -579,7 +579,7 @@ WHERE ( f10, f10 ) IN ( SELECT f11, f11 FROM t2 GROUP BY f11 ));
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ref f3 f3 5 const 0 Using where
|
||||
2 SUBQUERY t1 ALL NULL NULL NULL NULL 2
|
||||
2 SUBQUERY <subquery3> eq_ref distinct_key distinct_key 10 func,func 1
|
||||
2 SUBQUERY <subquery3> eq_ref distinct_key distinct_key 8 func,func 1
|
||||
3 MATERIALIZED t2 ALL NULL NULL NULL NULL 2
|
||||
SELECT * FROM t1
|
||||
WHERE f3 = (
|
||||
@ -1129,7 +1129,7 @@ EXPLAIN
|
||||
SELECT * FROM (t2 LEFT JOIN t1 ON t1.c1) LEFT JOIN t3 on t3.c1 WHERE 's' IN (SELECT c1 FROM t2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 system NULL NULL NULL NULL 0 const row not found
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2 Using join buffer (flat, BNL join)
|
||||
1 PRIMARY t3 ALL NULL NULL NULL NULL 3 Using where
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 2 Using where
|
||||
@ -1138,7 +1138,7 @@ c1 c1 c1
|
||||
EXPLAIN
|
||||
SELECT * FROM t4 LEFT JOIN t2 ON t4.c1 WHERE 's' IN (SELECT c1 FROM t2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
1 PRIMARY t4 index NULL PRIMARY 3 NULL 2 Using index; Using join buffer (flat, BNL join)
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2 Using where
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 2 Using where
|
||||
@ -1704,37 +1704,6 @@ AND t2.f2 = t1.f1;
|
||||
f1 f2 f1 f2
|
||||
drop table t1,t2,t3,t4;
|
||||
#
|
||||
# LP BUG#806943 Second crash with select_describe with nested subqueries in maria-5.3
|
||||
#
|
||||
CREATE TABLE t1 ( f4 int) ;
|
||||
INSERT INTO t1 VALUES (0),(0);
|
||||
CREATE TABLE t2 ( f2 int) ;
|
||||
CREATE TABLE t3 ( f1 int NOT NULL );
|
||||
CREATE TABLE t4 ( f2 int, f3 int) ;
|
||||
INSERT INTO t4 VALUES (8,0),(3,0);
|
||||
EXPLAIN SELECT *
|
||||
FROM t2, t3
|
||||
WHERE t3.f1 = (
|
||||
SELECT SUM( f2 )
|
||||
FROM t4
|
||||
WHERE EXISTS (
|
||||
SELECT DISTINCT f4
|
||||
FROM t1));
|
||||
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
|
||||
2 SUBQUERY t4 ALL NULL NULL NULL NULL 2
|
||||
3 SUBQUERY t1 ALL NULL NULL NULL NULL 2
|
||||
SELECT *
|
||||
FROM t2, t3
|
||||
WHERE t3.f1 = (
|
||||
SELECT SUM( f2 )
|
||||
FROM t4
|
||||
WHERE EXISTS (
|
||||
SELECT DISTINCT f4
|
||||
FROM t1));
|
||||
f2 f1
|
||||
drop table t1, t2, t3, t4;
|
||||
#
|
||||
# LP BUG#611690 Crash in select_describe() with nested subqueries
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
@ -2031,6 +2000,20 @@ WHERE t2.b IN (SELECT t3.b FROM t3 WHERE t3.a < ANY (SELECT t4.a FROM t4) and t3
|
||||
c a b
|
||||
10 7 0
|
||||
drop table t2, t3, t4;
|
||||
#
|
||||
# BUG#934597: Assertion `! is_set()' failed in Diagnostics_area::set_ok_status(THD...
|
||||
#
|
||||
CREATE TABLE t1 ( a VARCHAR(1) );
|
||||
INSERT INTO t1 VALUES ('u'),('k');
|
||||
CREATE TABLE t2 AS
|
||||
SELECT a AS field1 FROM t1
|
||||
WHERE ( SELECT alias1.a
|
||||
FROM t1 AS alias1
|
||||
) IS NOT NULL;
|
||||
ERROR 21000: Subquery returns more than 1 row
|
||||
DROP TABLE t2;
|
||||
ERROR 42S02: Unknown table 't2'
|
||||
DROP TABLE t1;
|
||||
set optimizer_switch=@subselect4_tmp;
|
||||
SET optimizer_switch= @@global.optimizer_switch;
|
||||
set @@tmp_table_size= @@global.tmp_table_size;
|
||||
|
@ -1473,7 +1473,7 @@ SET @@optimizer_switch='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 <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED t2 range PRIMARY PRIMARY 4 NULL 2 Using index condition; Rowid-ordered scan
|
||||
SELECT pk FROM t1 WHERE (a) IN (SELECT a FROM t2 WHERE pk > 0);
|
||||
pk
|
||||
@ -1861,6 +1861,58 @@ WHERE 'condition'='impossible'
|
||||
MIN(a)
|
||||
NULL
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# BUG#938131: Subquery materialization is not used in CREATE TABLE SELECT
|
||||
#
|
||||
CREATE TABLE t1(a int);
|
||||
INSERT INTO t1 values(1),(2);
|
||||
CREATE TABLE t2(a int);
|
||||
INSERT INTO t2 values(1),(2);
|
||||
# Should use Materialization:
|
||||
EXPLAIN SELECT * FROM t1 WHERE a IN (SELECT * FROM t2 GROUP BY a HAVING a > 1);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 Using where
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 2 Using temporary
|
||||
flush status;
|
||||
CREATE TABLE t3 SELECT * FROM t1 WHERE a IN (SELECT * FROM t2 GROUP BY a HAVING a > 1);
|
||||
SHOW STATUS LIKE 'Created_tmp_tables';
|
||||
Variable_name Value
|
||||
Created_tmp_tables 3
|
||||
DROP TABLE t1,t2,t3;
|
||||
#
|
||||
# BUG#939009: Crash with aggregate function in IN subquery
|
||||
#
|
||||
SET @save_optimizer_switch=@@optimizer_switch;
|
||||
SET optimizer_switch='materialization=on,semijoin=on';
|
||||
CREATE TABLE t1 (a int, b int);
|
||||
INSERT INTO t1 VALUES (7,1), (4,2), (7,7);
|
||||
CREATE TABLE t2 ( c INT );
|
||||
INSERT INTO t2 VALUES (4), (7), (6);
|
||||
EXPLAIN EXTENDED
|
||||
SELECT * FROM t1
|
||||
WHERE a IN (SELECT MAX(c) FROM t2) AND b=7 AND (a IS NULL OR a=b);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY <subquery2> const distinct_key distinct_key 4 const 1 100.00
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (flat, BNL join)
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 3 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from <materialize> (select max(`test`.`t2`.`c`) from `test`.`t2`) join `test`.`t1` where ((`test`.`t1`.`a` = `<subquery2>`.`MAX(c)`) and (`test`.`t1`.`b` = 7) and (<cache>(isnull(`<subquery2>`.`MAX(c)`)) or (`<subquery2>`.`MAX(c)` = 7)))
|
||||
SELECT * FROM t1
|
||||
WHERE a IN (SELECT MAX(c) FROM t2) AND b=7 AND (a IS NULL OR a=b);
|
||||
a b
|
||||
7 7
|
||||
EXPLAIN
|
||||
SELECT * FROM t1
|
||||
WHERE a IN (SELECT MAX(c) FROM t2 WHERE c < 4) AND b=7 AND (a IS NULL OR a=b);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <subquery2> const distinct_key distinct_key 4 const 1
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 Using where; Using join buffer (flat, BNL join)
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 3 Using where
|
||||
SELECT * FROM t1
|
||||
WHERE a IN (SELECT MAX(c) FROM t2 WHERE c < 4) AND b=7 AND (a IS NULL OR a=b);
|
||||
a b
|
||||
SET optimizer_switch=@save_optimizer_switch;
|
||||
DROP TABLE t1,t2;
|
||||
# This must be at the end:
|
||||
set optimizer_switch=@subselect_sj_mat_tmp;
|
||||
set join_cache_level=@save_join_cache_level;
|
||||
@ -1983,7 +2035,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 <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED t2 range PRIMARY PRIMARY 4 NULL 2 Using index condition
|
||||
SELECT pk FROM t1 WHERE (a) IN (SELECT a FROM t2 WHERE pk > 0);
|
||||
pk
|
||||
|
@ -348,7 +348,7 @@ FROM City LEFT JOIN Country ON (Country = Code and City.Population < 10000))
|
||||
AND Language IN ('English','Spanish');
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY CountryLanguage range Language Language 30 NULL 72 Using index condition; Using where; Rowid-ordered scan
|
||||
2 DEPENDENT SUBQUERY City ref CityName CityName 35 func 2 Using index condition; Using where
|
||||
2 DEPENDENT SUBQUERY City ref CityName CityName 35 func 1 Using index condition; Using where
|
||||
2 DEPENDENT SUBQUERY Country eq_ref PRIMARY PRIMARY 3 world.City.Country 1 Using where; Using index
|
||||
select count(*)
|
||||
from CountryLanguage
|
||||
|
@ -2979,7 +2979,7 @@ Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two`,<in_optim
|
||||
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
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 10 func,func 1 100.00
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 8 func,func 1 100.00
|
||||
2 MATERIALIZED 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` semi join (`test`.`t2`) where ((`test`.`t2`.`flag` = 'N'))
|
||||
@ -3569,7 +3569,7 @@ 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 <subquery2> eq_ref distinct_key distinct_key 23 test.t1.a,test.t1.b 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 21 test.t1.a,test.t1.b 1
|
||||
2 MATERIALIZED t1 ALL NULL NULL NULL NULL 9 Using temporary
|
||||
ALTER TABLE t1 ADD INDEX(a);
|
||||
SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
|
||||
@ -3581,7 +3581,7 @@ 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 a NULL NULL NULL 9 Using where
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 23 test.t1.a,test.t1.b 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 21 test.t1.a,test.t1.b 1
|
||||
2 MATERIALIZED t1 ALL NULL NULL NULL NULL 9 Using temporary
|
||||
DROP TABLE t1;
|
||||
create table t1( f1 int,f2 int);
|
||||
@ -4530,14 +4530,14 @@ SET @save_join_cache_level=@@join_cache_level;
|
||||
SET join_cache_level=0;
|
||||
EXPLAIN EXTENDED SELECT 1 FROM t1 WHERE 1 IN (SELECT min(a) FROM t1 GROUP BY a);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY <subquery2> const distinct_key distinct_key 5 const 1 100.00
|
||||
1 PRIMARY <subquery2> const distinct_key distinct_key 4 const 1 100.00
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
2 MATERIALIZED t1 ALL NULL NULL NULL NULL 2 100.00 Using temporary
|
||||
Warnings:
|
||||
Note 1003 select 1 AS `1` from <materialize> (select min(`test`.`t1`.`a`) from `test`.`t1` group by `test`.`t1`.`a`) join `test`.`t1` where (`<subquery2>`.`min(a)` = 1)
|
||||
EXPLAIN EXTENDED SELECT 1 FROM t1 WHERE 1 IN (SELECT min(a) FROM t1 WHERE a > 3 GROUP BY a);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY <subquery2> const distinct_key distinct_key 5 const 1 100.00
|
||||
1 PRIMARY <subquery2> const distinct_key distinct_key 4 const 1 100.00
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00
|
||||
2 MATERIALIZED t1 ALL NULL NULL NULL NULL 2 100.00 Using where; Using temporary
|
||||
Warnings:
|
||||
@ -5990,7 +5990,7 @@ WHERE col_varchar_nokey IN
|
||||
(SELECT col_varchar_key FROM it1 WHERE col_int_key IS NULL);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY ot system NULL NULL NULL NULL 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED it1 ref idx_cvk_cik idx_cvk_cik 9 const,const 1 Using where; Using index
|
||||
SELECT col_int_nokey FROM ot
|
||||
WHERE col_varchar_nokey IN
|
||||
@ -6003,7 +6003,7 @@ WHERE (col_varchar_nokey, 'x') IN
|
||||
(SELECT col_varchar_key, col_varchar_key2 FROM it2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY ot system NULL NULL NULL NULL 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 10 func,func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 8 func,func 1
|
||||
2 MATERIALIZED it2 ref idx_cvk_cvk2_cik,idx_cvk_cik idx_cvk_cvk2_cik 8 const,const 1 Using where; Using index
|
||||
SELECT col_int_nokey FROM ot
|
||||
WHERE (col_varchar_nokey, 'x') IN
|
||||
|
@ -802,7 +802,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 <subquery2> eq_ref distinct_key distinct_key 13 func,func 1 100.00
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 11 func,func 1 100.00
|
||||
2 MATERIALIZED t2 range PRIMARY PRIMARY 4 NULL 2 100.00 Using index condition; Rowid-ordered scan
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t2`.`pk` > 0))
|
||||
@ -1053,8 +1053,8 @@ AND t1.val IN (SELECT t3.val FROM t3
|
||||
WHERE t3.val LIKE 'a%' OR t3.val LIKE 'e%');
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 5
|
||||
1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 14 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 14 func 1
|
||||
1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 13 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 13 func 1
|
||||
3 MATERIALIZED t3 ALL NULL NULL NULL NULL 5 Using where
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 6 Using where
|
||||
SELECT *
|
||||
@ -1633,9 +1633,9 @@ select * from t1 A, t1 B
|
||||
where A.a = B.a and A.a in (select a from t2 C) and B.a in (select a from t2 D);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY A ALL NULL NULL NULL NULL 3
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
1 PRIMARY B ALL NULL NULL NULL NULL 3 Using where; Using join buffer (flat, BNL join)
|
||||
1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED C ALL NULL NULL NULL NULL 3
|
||||
3 MATERIALIZED D ALL NULL NULL NULL NULL 3
|
||||
drop table t1, t2;
|
||||
@ -2333,7 +2333,7 @@ explain
|
||||
SELECT * FROM t1 WHERE (a) IN (SELECT a FROM t2 JOIN t3 ON b = a);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 9
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED t3 ALL NULL NULL NULL NULL 13 Using where
|
||||
2 MATERIALIZED t2 ref b b 4 test.t3.a 1 Using index
|
||||
SELECT * FROM t1 WHERE (a) IN (SELECT a FROM t2 JOIN t3 ON b = a);
|
||||
@ -2453,7 +2453,7 @@ EXPLAIN
|
||||
SELECT * FROM t1 RIGHT JOIN t2 ON b = a WHERE t2.b IN (SELECT c FROM t3);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 Using where
|
||||
2 MATERIALIZED t3 ALL NULL NULL NULL NULL 2
|
||||
SELECT * FROM t1 RIGHT JOIN t2 ON b = a WHERE t2.b IN (SELECT c FROM t3);
|
||||
|
@ -180,7 +180,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 <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED it ALL NULL NULL NULL NULL 32
|
||||
select
|
||||
a, mid(filler1, 1,10), length(filler1)=length(filler2)
|
||||
@ -248,7 +248,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 <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED it ALL NULL NULL NULL NULL 52
|
||||
select
|
||||
a, mid(filler1, 1,10), length(filler1)=length(filler2)
|
||||
@ -289,7 +289,7 @@ from t0 where a in
|
||||
(select t2.a+t3.a from t1 left join (t2 join t3) on t2.a=t1.a and t3.a=t1.a);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t0 ALL NULL NULL NULL NULL 10
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 9 func 1 Using where
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 8 func 1 Using where
|
||||
2 MATERIALIZED t1 index a a 5 NULL 10 Using where; Using index
|
||||
2 MATERIALIZED t2 ref a a 5 test.t1.a 1 Using index
|
||||
2 MATERIALIZED t3 ref a a 5 test.t1.a 1 Using index
|
||||
@ -718,7 +718,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 <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED t3 index a a 5 NULL 30000 Using index
|
||||
select count(a) from t2 where a in ( SELECT a FROM t3);
|
||||
count(a)
|
||||
@ -875,7 +875,7 @@ SELECT * FROM t3 LEFT JOIN (v1,t2) ON t3.a = t2.a
|
||||
WHERE t3.b IN (SELECT b FROM t4);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t3 ALL NULL NULL NULL NULL 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 PRIMARY <derived3> ALL NULL NULL NULL NULL 2
|
||||
2 MATERIALIZED t4 ALL NULL NULL NULL NULL 2
|
||||
|
@ -130,7 +130,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 <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED t2 index b b 5 NULL 20 Using index
|
||||
select * from t1;
|
||||
a b
|
||||
@ -192,7 +192,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 <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED it ALL NULL NULL NULL NULL 32
|
||||
select
|
||||
a, mid(filler1, 1,10), length(filler1)=length(filler2)
|
||||
@ -260,7 +260,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 <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED it ALL NULL NULL NULL NULL 52
|
||||
select
|
||||
a, mid(filler1, 1,10), length(filler1)=length(filler2)
|
||||
@ -301,7 +301,7 @@ from t0 where a in
|
||||
(select t2.a+t3.a from t1 left join (t2 join t3) on t2.a=t1.a and t3.a=t1.a);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t0 ALL NULL NULL NULL NULL 10
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 9 func 1 Using where
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 8 func 1 Using where
|
||||
2 MATERIALIZED t1 index a a 5 NULL 10 Using where; Using index
|
||||
2 MATERIALIZED t2 ref a a 5 test.t1.a 1 Using index
|
||||
2 MATERIALIZED t3 ref a a 5 test.t1.a 1 Using index
|
||||
@ -732,7 +732,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 <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED t3 index a a 5 NULL 30000 Using index
|
||||
select count(a) from t2 where a in ( SELECT a FROM t3);
|
||||
count(a)
|
||||
@ -889,7 +889,7 @@ SELECT * FROM t3 LEFT JOIN (v1,t2) ON t3.a = t2.a
|
||||
WHERE t3.b IN (SELECT b FROM t4);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t3 ALL NULL NULL NULL NULL 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
1 PRIMARY t2 hash_ALL NULL #hash#$hj 5 test.t3.a 1 Using where; Using join buffer (flat, BNLH join)
|
||||
1 PRIMARY <derived3> ALL NULL NULL NULL NULL 2 Using join buffer (incremental, BNL join)
|
||||
2 MATERIALIZED t4 ALL NULL NULL NULL NULL 2
|
||||
@ -987,7 +987,7 @@ EXPLAIN
|
||||
SELECT * FROM t1 WHERE b IN (SELECT a FROM t2 GROUP BY a);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 1
|
||||
SELECT * FROM t1 WHERE b IN (SELECT a FROM t2 GROUP BY a);
|
||||
a b
|
||||
@ -996,7 +996,7 @@ EXPLAIN
|
||||
SELECT * FROM t1 WHERE b IN (SELECT max(a) FROM t2 GROUP BY a);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 PRIMARY <subquery2> hash_ALL distinct_key #hash#distinct_key 5 test.t1.b 1 Using join buffer (flat, BNLH join)
|
||||
1 PRIMARY <subquery2> hash_ALL distinct_key #hash#distinct_key 4 test.t1.b 1 Using join buffer (flat, BNLH join)
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 1 Using temporary
|
||||
SELECT * FROM t1 WHERE b IN (SELECT max(a) FROM t2 GROUP BY a);
|
||||
a b
|
||||
|
@ -182,7 +182,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 <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED it ALL NULL NULL NULL NULL 32
|
||||
select
|
||||
a, mid(filler1, 1,10), length(filler1)=length(filler2)
|
||||
@ -250,7 +250,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 <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED it ALL NULL NULL NULL NULL 52
|
||||
select
|
||||
a, mid(filler1, 1,10), length(filler1)=length(filler2)
|
||||
@ -291,7 +291,7 @@ from t0 where a in
|
||||
(select t2.a+t3.a from t1 left join (t2 join t3) on t2.a=t1.a and t3.a=t1.a);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t0 ALL NULL NULL NULL NULL 10
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 9 func 1 Using where
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 8 func 1 Using where
|
||||
2 MATERIALIZED t1 index a a 5 NULL 10 Using where; Using index
|
||||
2 MATERIALIZED t2 ref a a 5 test.t1.a 1 Using index
|
||||
2 MATERIALIZED t3 ref a a 5 test.t1.a 1 Using index
|
||||
@ -720,7 +720,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 <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED t3 index a a 5 NULL 30000 Using index
|
||||
select count(a) from t2 where a in ( SELECT a FROM t3);
|
||||
count(a)
|
||||
@ -877,7 +877,7 @@ SELECT * FROM t3 LEFT JOIN (v1,t2) ON t3.a = t2.a
|
||||
WHERE t3.b IN (SELECT b FROM t4);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t3 ALL NULL NULL NULL NULL 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 PRIMARY <derived3> ALL NULL NULL NULL NULL 2
|
||||
2 MATERIALIZED t4 ALL NULL NULL NULL NULL 2
|
||||
|
@ -815,7 +815,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 <subquery2> eq_ref distinct_key distinct_key 13 func,func 1 100.00
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 11 func,func 1 100.00
|
||||
2 MATERIALIZED t2 range PRIMARY PRIMARY 4 NULL 2 100.00 Using index condition; Rowid-ordered scan
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`pk` AS `pk` from `test`.`t1` semi join (`test`.`t2`) where ((`test`.`t2`.`pk` > 0))
|
||||
@ -1066,8 +1066,8 @@ AND t1.val IN (SELECT t3.val FROM t3
|
||||
WHERE t3.val LIKE 'a%' OR t3.val LIKE 'e%');
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 5
|
||||
1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 14 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 14 func 1
|
||||
1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 13 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 13 func 1
|
||||
3 MATERIALIZED t3 ALL NULL NULL NULL NULL 5 Using where
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 6 Using where
|
||||
SELECT *
|
||||
@ -1646,9 +1646,9 @@ select * from t1 A, t1 B
|
||||
where A.a = B.a and A.a in (select a from t2 C) and B.a in (select a from t2 D);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY A ALL NULL NULL NULL NULL 3
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
1 PRIMARY B ALL NULL NULL NULL NULL 3 Using where; Using join buffer (flat, BNL join)
|
||||
1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED C ALL NULL NULL NULL NULL 3
|
||||
3 MATERIALIZED D ALL NULL NULL NULL NULL 3
|
||||
drop table t1, t2;
|
||||
@ -2003,7 +2003,7 @@ explain extended
|
||||
SELECT * FROM t1 NATURAL LEFT JOIN (t2, t3) WHERE t2.f3 IN (SELECT * FROM t4);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2 100.00
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 5 func 1 100.00
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1 100.00
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (flat, BNL join)
|
||||
1 PRIMARY t3 ALL NULL NULL NULL NULL 5 100.00 Using where; Using join buffer (incremental, BNL join)
|
||||
2 MATERIALIZED t4 index f2 f2 5 NULL 2 100.00 Using index
|
||||
@ -2347,7 +2347,7 @@ explain
|
||||
SELECT * FROM t1 WHERE (a) IN (SELECT a FROM t2 JOIN t3 ON b = a);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 9
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED t3 ALL NULL NULL NULL NULL 13 Using where
|
||||
2 MATERIALIZED t2 ref b b 4 test.t3.a 1 Using index
|
||||
SELECT * FROM t1 WHERE (a) IN (SELECT a FROM t2 JOIN t3 ON b = a);
|
||||
@ -2467,7 +2467,7 @@ EXPLAIN
|
||||
SELECT * FROM t1 RIGHT JOIN t2 ON b = a WHERE t2.b IN (SELECT c FROM t3);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join)
|
||||
2 MATERIALIZED t3 ALL NULL NULL NULL NULL 2
|
||||
SELECT * FROM t1 RIGHT JOIN t2 ON b = a WHERE t2.b IN (SELECT c FROM t3);
|
||||
@ -2783,7 +2783,7 @@ SELECT * FROM t1 LEFT JOIN t2 ON (c = b)
|
||||
WHERE (a, b) IN (SELECT a, b FROM t1 t);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL idx_a NULL NULL NULL 3
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 10 func,func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 8 func,func 1
|
||||
1 PRIMARY t2 ref idx_c idx_c 4 test.t1.b 2 Using where; Using index
|
||||
2 MATERIALIZED t ALL idx_a NULL NULL NULL 3
|
||||
SELECT * FROM t1 LEFT JOIN t2 ON (c = b)
|
||||
@ -2798,7 +2798,7 @@ SELECT * FROM t1 LEFT JOIN t3 ON (c = b)
|
||||
WHERE (a, b) IN (SELECT a, b FROM t1 t);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL idx_a NULL NULL NULL 3
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 10 func,func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 8 func,func 1
|
||||
1 PRIMARY t3 ref idx_c idx_c 4 test.t1.b 2 Using where
|
||||
2 MATERIALIZED t ALL idx_a NULL NULL NULL 3
|
||||
SELECT * FROM t1 LEFT JOIN t3 ON (c = b)
|
||||
@ -2814,7 +2814,7 @@ SELECT * FROM t1 LEFT JOIN t2 ON (c = b)
|
||||
WHERE (a, b) IN (SELECT a, b FROM t1 t);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL idx_a NULL NULL NULL 3
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 10 func,func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 8 func,func 1
|
||||
1 PRIMARY t2 ref idx_c idx_c 4 test.t1.b 2 Using where; Using index
|
||||
2 MATERIALIZED t ALL idx_a NULL NULL NULL 3
|
||||
SELECT * FROM t1 LEFT JOIN t2 ON (c = b)
|
||||
@ -2829,7 +2829,7 @@ SELECT * FROM t1 LEFT JOIN t3 ON (c = b)
|
||||
WHERE (a, b) IN (SELECT a, b FROM t1 t);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL idx_a NULL NULL NULL 3
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 10 func,func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 8 func,func 1
|
||||
1 PRIMARY t3 ref idx_c idx_c 4 test.t1.b 2 Using where; Using join buffer (flat, BKA join); Key-ordered Rowid-ordered scan
|
||||
2 MATERIALIZED t ALL idx_a NULL NULL NULL 3
|
||||
SELECT * FROM t1 LEFT JOIN t3 ON (c = b)
|
||||
|
@ -47,7 +47,7 @@ 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
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 9 func 1 100.00
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 8 func 1 100.00
|
||||
2 MATERIALIZED 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` semi join (`test`.`t2`) where ((`test`.`t2`.`b1` > '0'))
|
||||
@ -59,7 +59,7 @@ 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
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 9 func 1 100.00
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 8 func 1 100.00
|
||||
2 MATERIALIZED 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` semi join (`test`.`t2`) where ((`test`.`t2`.`b1` > '0'))
|
||||
@ -71,7 +71,7 @@ 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
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 18 func,func 1 100.00
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 16 func,func 1 100.00
|
||||
2 MATERIALIZED 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` semi join (`test`.`t2`) where ((`test`.`t2`.`b1` > '0'))
|
||||
@ -83,7 +83,7 @@ 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 <subquery2> eq_ref distinct_key distinct_key 18 test.t1.a1,test.t1.a2 1 100.00
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 16 test.t1.a1,test.t1.a2 1 100.00
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 5 100.00 Using where; Using temporary
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from <materialize> (select `test`.`t2`.`b1`,min(`test`.`t2`.`b2`) from `test`.`t2` where (`test`.`t2`.`b1` > '0') group by `test`.`t2`.`b1`) join `test`.`t1` where ((`<subquery2>`.`min(b2)` = `test`.`t1`.`a2`) and (`<subquery2>`.`b1` = `test`.`t1`.`a1`))
|
||||
@ -106,7 +106,7 @@ explain extended
|
||||
select * from t1i where a1 in (select max(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 it1i1,it1i3 # 18 # 3 100.00 #
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key # 9 # 1 100.00 #
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key # 8 # 1 100.00 #
|
||||
2 MATERIALIZED t2i index it2i1,it2i3 # 9 # 5 100.00 #
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1i`.`a1` AS `a1`,`test`.`t1i`.`a2` AS `a2` from <materialize> (select max(`test`.`t2i`.`b1`) from `test`.`t2i` where (`test`.`t2i`.`b1` > '0') group by `test`.`t2i`.`b1`) join `test`.`t1i` where (`<subquery2>`.`max(b1)` = `test`.`t1i`.`a1`)
|
||||
@ -153,7 +153,7 @@ 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 <subquery2> eq_ref distinct_key distinct_key 18 test.t1.a1,test.t1.a2 1 100.00
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 16 test.t1.a1,test.t1.a2 1 100.00
|
||||
2 MATERIALIZED 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 <materialize> (select `test`.`t2i`.`b1`,max(`test`.`t2i`.`b2`) from `test`.`t2i` group by `test`.`t2i`.`b1`) join `test`.`t1` where ((`<subquery2>`.`max(b2)` = `test`.`t1`.`a2`) and (`<subquery2>`.`b1` = `test`.`t1`.`a1`))
|
||||
@ -165,12 +165,12 @@ prepare st1 from "explain select * from t1 where (a1, a2) in (select b1, max(b2)
|
||||
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 <subquery2> eq_ref distinct_key distinct_key 18 test.t1.a1,test.t1.a2 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 16 test.t1.a1,test.t1.a2 1
|
||||
2 MATERIALIZED 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 <subquery2> eq_ref distinct_key distinct_key 18 test.t1.a1,test.t1.a2 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 16 test.t1.a1,test.t1.a2 1
|
||||
2 MATERIALIZED 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;
|
||||
@ -185,7 +185,7 @@ 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 <subquery2> eq_ref distinct_key distinct_key 18 test.t1.a1,test.t1.a2 1 100.00
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 16 test.t1.a1,test.t1.a2 1 100.00
|
||||
2 MATERIALIZED 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 <materialize> (select `test`.`t2i`.`b1`,min(`test`.`t2i`.`b2`) from `test`.`t2i` where (`test`.`t2i`.`b1` > '0') group by `test`.`t2i`.`b1`) join `test`.`t1` where ((`<subquery2>`.`min(b2)` = `test`.`t1`.`a2`) and (`<subquery2>`.`b1` = `test`.`t1`.`a1`))
|
||||
@ -233,7 +233,7 @@ 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 <subquery2> eq_ref distinct_key distinct_key 18 test.t1.a1,test.t1.a2 1 100.00
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 16 test.t1.a1,test.t1.a2 1 100.00
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 5 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2` from <materialize> (select `test`.`t2`.`b1`,`test`.`t2`.`b2` from `test`.`t2` order by `test`.`t2`.`b1`,`test`.`t2`.`b2`) join `test`.`t1` where ((`<subquery2>`.`b2` = `test`.`t1`.`a2`) and (`<subquery2>`.`b1` = `test`.`t1`.`a1`))
|
||||
@ -245,7 +245,7 @@ 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 it1i1,it1i2,it1i3 it1i3 18 NULL 3 100.00 Using where; Using index
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 18 test.t1i.a1,test.t1i.a2 1 100.00
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 16 test.t1i.a1,test.t1i.a2 1 100.00
|
||||
2 MATERIALIZED 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 <materialize> (select `test`.`t2i`.`b1`,`test`.`t2i`.`b2` from `test`.`t2i` order by `test`.`t2i`.`b1`,`test`.`t2i`.`b2`) join `test`.`t1i` where ((`<subquery2>`.`b2` = `test`.`t1i`.`a2`) and (`<subquery2>`.`b1` = `test`.`t1i`.`a1`))
|
||||
@ -299,8 +299,8 @@ where (a1, a2) in (select b1, b2 from t2 where b1 > '0') 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
|
||||
1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 18 func,func 1 100.00
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 18 func,func 1 100.00
|
||||
1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 16 func,func 1 100.00
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 16 func,func 1 100.00
|
||||
3 MATERIALIZED t3 ALL NULL NULL NULL NULL 4 100.00 Using where
|
||||
3 MATERIALIZED t2i index it2i1,it2i2,it2i3 it2i3 18 NULL 5 80.00 Using where; Using index; Using join buffer (flat, BNL join)
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 5 100.00 Using where
|
||||
@ -341,8 +341,8 @@ b2 in (select c2 from t3 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
|
||||
1 PRIMARY <subquery5> eq_ref distinct_key distinct_key 18 func,func 1 100.00
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 18 func,func 1 100.00
|
||||
1 PRIMARY <subquery5> eq_ref distinct_key distinct_key 16 func,func 1 100.00
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 16 func,func 1 100.00
|
||||
5 MATERIALIZED t3 ALL NULL NULL NULL NULL 4 100.00 Using where
|
||||
5 MATERIALIZED t2i index it2i1,it2i2,it2i3 it2i3 18 NULL 5 80.00 Using where; Using index; Using join buffer (flat, BNL join)
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 5 100.00 Using where
|
||||
@ -367,7 +367,7 @@ 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
|
||||
1 PRIMARY <subquery5> eq_ref distinct_key distinct_key 18 func,func 1 100.00
|
||||
1 PRIMARY <subquery5> eq_ref distinct_key distinct_key 16 func,func 1 100.00
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 5 100.00 Using where; Start temporary; End temporary; Using join buffer (flat, BNL join)
|
||||
5 MATERIALIZED t3c ALL NULL NULL NULL NULL 4 100.00 Using where
|
||||
5 MATERIALIZED t2i index it2i1,it2i2,it2i3 it2i3 18 NULL 5 80.00 Using where; Using index; Using join buffer (flat, BNL join)
|
||||
@ -436,7 +436,7 @@ 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
|
||||
1 PRIMARY <subquery4> eq_ref distinct_key distinct_key 18 func,func 1 100.00
|
||||
1 PRIMARY <subquery4> eq_ref distinct_key distinct_key 16 func,func 1 100.00
|
||||
4 MATERIALIZED t3 ALL NULL NULL NULL NULL 4 100.00 Using where
|
||||
4 MATERIALIZED t2i index it2i1,it2i2,it2i3 it2i3 18 NULL 5 80.00 Using where; Using index; Using join buffer (flat, BNL join)
|
||||
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
@ -460,7 +460,7 @@ 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 t3 ALL NULL NULL NULL NULL 4 100.00 Using where; Using join buffer (flat, BNL join)
|
||||
1 PRIMARY <subquery4> eq_ref distinct_key distinct_key 18 func,func 1 100.00
|
||||
1 PRIMARY <subquery4> eq_ref distinct_key distinct_key 16 func,func 1 100.00
|
||||
4 MATERIALIZED t3 ALL NULL NULL NULL NULL 4 100.00 Using where
|
||||
4 MATERIALIZED t2i index it2i1,it2i2,it2i3 it2i3 18 NULL 5 80.00 Using where; Using index; Using join buffer (flat, BNL join)
|
||||
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 3 100.00 Using where
|
||||
@ -645,7 +645,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
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 20 func 1 100.00 Using where
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 19 func 1 100.00 Using where
|
||||
2 MATERIALIZED 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` semi join (`test`.`t2_16`) where ((`test`.`t2_16`.`b1` > '0') and (`test`.`t1_16`.`a1` = substr(`test`.`t2_16`.`b1`,1,16)))
|
||||
@ -675,7 +675,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 <subquery2> eq_ref distinct_key distinct_key 261 test.t1_16.a1 1 100.00 Using where
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 260 test.t1_16.a1 1 100.00 Using where
|
||||
2 MATERIALIZED 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 <materialize> (select group_concat(`test`.`t2_16`.`b1` separator ',') from `test`.`t2_16` group by `test`.`t2_16`.`b2`) join `test`.`t1_16` where (`test`.`t1_16`.`a1` = `<subquery2>`.`group_concat(b1)`)
|
||||
@ -760,7 +760,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
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 517 func 1 100.00 Using where
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 516 func 1 100.00 Using where
|
||||
2 MATERIALIZED 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` semi join (`test`.`t2_512`) where ((`test`.`t2_512`.`b1` > '0') and (`test`.`t1_512`.`a1` = substr(`test`.`t2_512`.`b1`,1,512)))
|
||||
@ -775,7 +775,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 <subquery2> eq_ref distinct_key distinct_key 261 test.t1_512.a1 1 100.00 Using where
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 260 test.t1_512.a1 1 100.00 Using where
|
||||
2 MATERIALIZED 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 <materialize> (select group_concat(`test`.`t2_512`.`b1` separator ',') from `test`.`t2_512` group by `test`.`t2_512`.`b2`) join `test`.`t1_512` where (`test`.`t1_512`.`a1` = `<subquery2>`.`group_concat(b1)`)
|
||||
@ -789,7 +789,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 <subquery2> eq_ref distinct_key distinct_key 261 test.t1_512.a1 1 100.00 Using where
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 260 test.t1_512.a1 1 100.00 Using where
|
||||
2 MATERIALIZED 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 <materialize> (select group_concat(`test`.`t2_512`.`b1` separator ',') from `test`.`t2_512` group by `test`.`t2_512`.`b2`) join `test`.`t1_512` where (`test`.`t1_512`.`a1` = `<subquery2>`.`group_concat(b1)`)
|
||||
@ -870,7 +870,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 <subquery2> eq_ref distinct_key distinct_key 261 test.t1_1024.a1 1 100.00 Using where
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 260 test.t1_1024.a1 1 100.00 Using where
|
||||
2 MATERIALIZED 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 <materialize> (select group_concat(`test`.`t2_1024`.`b1` separator ',') from `test`.`t2_1024` group by `test`.`t2_1024`.`b2`) join `test`.`t1_1024` where (`test`.`t1_1024`.`a1` = `<subquery2>`.`group_concat(b1)`)
|
||||
@ -884,7 +884,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 <subquery2> eq_ref distinct_key distinct_key 261 test.t1_1024.a1 1 100.00 Using where
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 260 test.t1_1024.a1 1 100.00 Using where
|
||||
2 MATERIALIZED 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 <materialize> (select group_concat(`test`.`t2_1024`.`b1` separator ',') from `test`.`t2_1024` group by `test`.`t2_1024`.`b2`) join `test`.`t1_1024` where (`test`.`t1_1024`.`a1` = `<subquery2>`.`group_concat(b1)`)
|
||||
@ -965,7 +965,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 <subquery2> eq_ref distinct_key distinct_key 261 test.t1_1025.a1 1 100.00 Using where
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 260 test.t1_1025.a1 1 100.00 Using where
|
||||
2 MATERIALIZED 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 <materialize> (select group_concat(`test`.`t2_1025`.`b1` separator ',') from `test`.`t2_1025` group by `test`.`t2_1025`.`b2`) join `test`.`t1_1025` where (`test`.`t1_1025`.`a1` = `<subquery2>`.`group_concat(b1)`)
|
||||
@ -979,7 +979,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 <subquery2> eq_ref distinct_key distinct_key 261 test.t1_1025.a1 1 100.00 Using where
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 260 test.t1_1025.a1 1 100.00 Using where
|
||||
2 MATERIALIZED 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 <materialize> (select group_concat(`test`.`t2_1025`.`b1` separator ',') from `test`.`t2_1025` group by `test`.`t2_1025`.`b2`) join `test`.`t1_1025` where (`test`.`t1_1025`.`a1` = `<subquery2>`.`group_concat(b1)`)
|
||||
@ -1001,7 +1001,7 @@ 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
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 10 func,func 1 100.00
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 8 func,func 1 100.00
|
||||
2 MATERIALIZED 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` semi join (`test`.`t2bit`) where 1
|
||||
@ -1187,7 +1187,7 @@ insert into t1 values (5);
|
||||
explain select min(a1) from t1 where 7 in (select max(b1) from t2 group by b1);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 system NULL NULL NULL NULL 1
|
||||
1 PRIMARY <subquery2> const distinct_key distinct_key 5 const 1
|
||||
1 PRIMARY <subquery2> const distinct_key distinct_key 4 const 1
|
||||
2 MATERIALIZED NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
||||
select min(a1) from t1 where 7 in (select max(b1) from t2 group by b1);
|
||||
min(a1)
|
||||
@ -1236,7 +1236,7 @@ insert into t1 values ('aa', 'aaaa');
|
||||
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
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 3 func 1 Using where
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 2 func 1 Using where
|
||||
2 MATERIALIZED t1 ALL NULL NULL NULL NULL 2
|
||||
select a,b from t1 where b in (select a from t1);
|
||||
a b
|
||||
@ -1273,7 +1273,7 @@ GROUP BY t3i
|
||||
);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 system NULL NULL NULL NULL 1
|
||||
1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 5 const 1
|
||||
1 PRIMARY <subquery3> eq_ref distinct_key distinct_key 4 const 1
|
||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2 Using where; Start temporary; End temporary; Using join buffer (flat, BNL join)
|
||||
1 PRIMARY t4 ALL NULL NULL NULL NULL 2 Using where; Using join buffer (flat, BNL join)
|
||||
3 MATERIALIZED t3 ALL NULL NULL NULL NULL 2 Using temporary
|
||||
@ -1510,7 +1510,7 @@ SET @@optimizer_switch='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 <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED t2 range PRIMARY PRIMARY 4 NULL 2 Using index condition; Rowid-ordered scan
|
||||
SELECT pk FROM t1 WHERE (a) IN (SELECT a FROM t2 WHERE pk > 0);
|
||||
pk
|
||||
@ -1878,7 +1878,7 @@ insert into t2 values
|
||||
explain select * from t1 where t1.a in (select a from t2 where t2.a=7 or t2.b<=1);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 4
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 5 func 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
|
||||
2 MATERIALIZED t2 ALL i_a NULL NULL NULL 8 Using where
|
||||
select * from t1 where t1.a in (select a from t2 where t2.a=7 or t2.b<=1);
|
||||
a b
|
||||
@ -1898,6 +1898,59 @@ WHERE 'condition'='impossible'
|
||||
MIN(a)
|
||||
NULL
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# BUG#938131: Subquery materialization is not used in CREATE TABLE SELECT
|
||||
#
|
||||
CREATE TABLE t1(a int);
|
||||
INSERT INTO t1 values(1),(2);
|
||||
CREATE TABLE t2(a int);
|
||||
INSERT INTO t2 values(1),(2);
|
||||
# Should use Materialization:
|
||||
EXPLAIN SELECT * FROM t1 WHERE a IN (SELECT * FROM t2 GROUP BY a HAVING a > 1);
|
||||
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 <subquery2> eq_ref distinct_key distinct_key 4 test.t1.a 1
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 2 Using temporary
|
||||
flush status;
|
||||
CREATE TABLE t3 SELECT * FROM t1 WHERE a IN (SELECT * FROM t2 GROUP BY a HAVING a > 1);
|
||||
SHOW STATUS LIKE 'Created_tmp_tables';
|
||||
Variable_name Value
|
||||
Created_tmp_tables 2
|
||||
DROP TABLE t1,t2,t3;
|
||||
#
|
||||
# BUG#939009: Crash with aggregate function in IN subquery
|
||||
#
|
||||
SET @save_optimizer_switch=@@optimizer_switch;
|
||||
SET optimizer_switch='materialization=on,semijoin=on';
|
||||
CREATE TABLE t1 (a int, b int);
|
||||
INSERT INTO t1 VALUES (7,1), (4,2), (7,7);
|
||||
CREATE TABLE t2 ( c INT );
|
||||
INSERT INTO t2 VALUES (4), (7), (6);
|
||||
EXPLAIN EXTENDED
|
||||
SELECT * FROM t1
|
||||
WHERE a IN (SELECT MAX(c) FROM t2) AND b=7 AND (a IS NULL OR a=b);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY <subquery2> const distinct_key distinct_key 4 const 1 100.00
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer (flat, BNL join)
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 3 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from <materialize> (select max(`test`.`t2`.`c`) from `test`.`t2`) join `test`.`t1` where ((`test`.`t1`.`a` = `<subquery2>`.`MAX(c)`) and (`test`.`t1`.`b` = 7) and (<cache>(isnull(`<subquery2>`.`MAX(c)`)) or (`<subquery2>`.`MAX(c)` = 7)))
|
||||
SELECT * FROM t1
|
||||
WHERE a IN (SELECT MAX(c) FROM t2) AND b=7 AND (a IS NULL OR a=b);
|
||||
a b
|
||||
7 7
|
||||
EXPLAIN
|
||||
SELECT * FROM t1
|
||||
WHERE a IN (SELECT MAX(c) FROM t2 WHERE c < 4) AND b=7 AND (a IS NULL OR a=b);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <subquery2> const distinct_key distinct_key 4 const 1
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 3 Using where; Using join buffer (flat, BNL join)
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 3 Using where
|
||||
SELECT * FROM t1
|
||||
WHERE a IN (SELECT MAX(c) FROM t2 WHERE c < 4) AND b=7 AND (a IS NULL OR a=b);
|
||||
a b
|
||||
SET optimizer_switch=@save_optimizer_switch;
|
||||
DROP TABLE t1,t2;
|
||||
# This must be at the end:
|
||||
set optimizer_switch=@subselect_sj_mat_tmp;
|
||||
set join_cache_level=@save_join_cache_level;
|
||||
|
@ -40,14 +40,14 @@ alter table t3 add primary key(a);
|
||||
# (despite that subquery's join output estimate is 50 rows)
|
||||
explain select * from t3 where a in (select max(t2.a) from t1, t2 group by t2.b);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <subquery2> ALL distinct_key NULL NULL NULL 5 Using where
|
||||
1 PRIMARY <subquery2> ALL distinct_key NULL NULL NULL 5
|
||||
1 PRIMARY t3 eq_ref PRIMARY PRIMARY 8 <subquery2>.max(t2.a) 1 Using where; Using index
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 5 Using temporary
|
||||
2 MATERIALIZED t1 ALL NULL NULL NULL NULL 10 Using join buffer (flat, BNL join)
|
||||
# Compare to this which really will have 50 record combinations:
|
||||
explain select * from t3 where a in (select max(t2.a) from t1, t2 group by t2.b, t1.b);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <subquery2> ALL distinct_key NULL NULL NULL 50 Using where
|
||||
1 PRIMARY <subquery2> ALL distinct_key NULL NULL NULL 50
|
||||
1 PRIMARY t3 eq_ref PRIMARY PRIMARY 8 <subquery2>.max(t2.a) 1 Using where; Using index
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 5 Using temporary
|
||||
2 MATERIALIZED t1 ALL NULL NULL NULL NULL 10 Using join buffer (flat, BNL join)
|
||||
@ -57,7 +57,7 @@ SET optimizer_switch='outer_join_with_cache=off';
|
||||
explain select * from t3
|
||||
where a in (select max(t2.a) from t1 left join t2 on t1.a=t2.a group by t2.b, t1.b);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <subquery2> ALL distinct_key NULL NULL NULL 50 Using where
|
||||
1 PRIMARY <subquery2> ALL distinct_key NULL NULL NULL 50
|
||||
1 PRIMARY t3 eq_ref PRIMARY PRIMARY 8 <subquery2>.max(t2.a) 1 Using where; Using index
|
||||
2 MATERIALIZED t1 ALL NULL NULL NULL NULL 10 Using temporary
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 5 Using where
|
||||
@ -69,7 +69,7 @@ t4.b=t0.a and t4.a in (select max(t2.a) from t1, t2 group by t2.b);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t0 ALL NULL NULL NULL NULL 10
|
||||
1 PRIMARY t4 ALL a NULL NULL NULL 100 Using where; Using join buffer (flat, BNL join)
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 5 test.t4.a 1
|
||||
1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 test.t4.a 1
|
||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 5 Using temporary
|
||||
2 MATERIALIZED t1 ALL NULL NULL NULL NULL 10 Using join buffer (flat, BNL join)
|
||||
insert into t4 select 100 + (B.a *100 + A.a), 100 + (B.a*100 + A.a), 'filler' from t4 A, t0 B;
|
||||
@ -77,8 +77,8 @@ explain select * from t4 where
|
||||
t4.a in (select max(t2.a) from t1, t2 group by t2.b) and
|
||||
t4.b in (select max(t2.a) from t1, t2 group by t2.b);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <subquery2> ALL distinct_key NULL NULL NULL 5 Using where
|
||||
1 PRIMARY <subquery3> ALL distinct_key NULL NULL NULL 5 Using where; Using join buffer (flat, BNL join)
|
||||
1 PRIMARY <subquery2> ALL distinct_key NULL NULL NULL 5
|
||||
1 PRIMARY <subquery3> ALL distinct_key NULL NULL NULL 5 Using join buffer (flat, BNL join)
|
||||
1 PRIMARY t4 ref a a 10 <subquery2>.max(t2.a),<subquery3>.max(t2.a) 12
|
||||
3 MATERIALIZED t2 ALL NULL NULL NULL NULL 5 Using temporary
|
||||
3 MATERIALIZED t1 ALL NULL NULL NULL NULL 10 Using join buffer (flat, BNL join)
|
||||
@ -114,7 +114,7 @@ insert into t1 select A.a + 10*B.a + 100*C.a from t0 A, t0 B, t0 C;
|
||||
# The following must use non-merged SJ-Materialization:
|
||||
explain select * from t1 X join t0 Y on X.a < Y.a where X.a in (select max(a) from t0);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <subquery2> ALL distinct_key NULL NULL NULL 1 Using where
|
||||
1 PRIMARY <subquery2> ALL distinct_key NULL NULL NULL 1
|
||||
1 PRIMARY X ref a a 5 <subquery2>.max(a) 1 Using index
|
||||
1 PRIMARY Y ALL NULL NULL NULL NULL 10 Using where; Using join buffer (flat, BNL join)
|
||||
2 MATERIALIZED t0 ALL NULL NULL NULL NULL 10
|
||||
|
@ -359,3 +359,20 @@ total_rows min_value MAX(c1+0)
|
||||
DROP TABLE t1;
|
||||
#
|
||||
End of 5.1 tests
|
||||
create function y2k() returns int deterministic return 2000;
|
||||
create table t1 (a year(2), b int);
|
||||
insert t1 values (0,2000);
|
||||
select a from t1 where a=2000;
|
||||
a
|
||||
00
|
||||
select a from t1 where a=1000+1000;
|
||||
a
|
||||
00
|
||||
select a from t1 where a=(select 2000 from dual where 1);
|
||||
a
|
||||
select a from t1 where a=y2k();
|
||||
a
|
||||
select a from t1 where a=b;
|
||||
a
|
||||
drop table t1;
|
||||
drop function y2k;
|
||||
|
@ -351,14 +351,14 @@ Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (a varchar(255), b varchar(255), c varchar(255), d varchar(255), e varchar(255), KEY t1 (a, b, c, d, e));
|
||||
ERROR 42000: Specified key was too long; max key length is 1208 bytes
|
||||
ERROR 42000: Specified key was too long; max key length is 1000 bytes
|
||||
CREATE TABLE t1 (a varchar(32000), unique key(a));
|
||||
ERROR 42000: Specified key was too long; max key length is 1208 bytes
|
||||
ERROR 42000: Specified key was too long; max key length is 1000 bytes
|
||||
CREATE TABLE t1 (a varchar(1), b varchar(1), key (a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b,a,b));
|
||||
ERROR 42000: Too many key parts specified; max 32 parts allowed
|
||||
CREATE TABLE t1 (a varchar(255), b varchar(255), c varchar(255), d varchar(255), e varchar(255));
|
||||
ALTER TABLE t1 ADD INDEX t1 (a, b, c, d, e);
|
||||
ERROR 42000: Specified key was too long; max key length is 1208 bytes
|
||||
ERROR 42000: Specified key was too long; max key length is 1000 bytes
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a int not null, b int, c int, key(b), key(c), key(a,b), key(c,a));
|
||||
INSERT into t1 values (0,null,0), (0,null,1), (0,null,2), (0,null,3), (1,1,4);
|
||||
@ -1565,7 +1565,7 @@ a b
|
||||
drop table t1;
|
||||
create table t1 (v varchar(65530), key(v));
|
||||
Warnings:
|
||||
Warning 1071 Specified key was too long; max key length is 1208 bytes
|
||||
Warning 1071 Specified key was too long; max key length is 1000 bytes
|
||||
drop table if exists t1;
|
||||
create table t1 (v varchar(65536));
|
||||
Warnings:
|
||||
@ -1803,34 +1803,34 @@ t1 CREATE TABLE `t1` (
|
||||
drop table t1;
|
||||
create table t1 (a varchar(2048), key `a` (a));
|
||||
Warnings:
|
||||
Warning 1071 Specified key was too long; max key length is 1208 bytes
|
||||
Warning 1071 Specified key was too long; max key length is 1000 bytes
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` varchar(2048) DEFAULT NULL,
|
||||
KEY `a` (`a`(1208))
|
||||
KEY `a` (`a`(1000))
|
||||
) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=0
|
||||
drop table t1;
|
||||
create table t1 (a varchar(2048), key `a` (a) key_block_size=1024);
|
||||
Warnings:
|
||||
Warning 1071 Specified key was too long; max key length is 1208 bytes
|
||||
Warning 1071 Specified key was too long; max key length is 1000 bytes
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` varchar(2048) DEFAULT NULL,
|
||||
KEY `a` (`a`(1208)) KEY_BLOCK_SIZE=8192
|
||||
KEY `a` (`a`(1000)) KEY_BLOCK_SIZE=8192
|
||||
) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=0
|
||||
drop table t1;
|
||||
create table t1 (a int not null, b varchar(2048), key (a), key(b)) key_block_size=1024;
|
||||
Warnings:
|
||||
Warning 1071 Specified key was too long; max key length is 1208 bytes
|
||||
Warning 1071 Specified key was too long; max key length is 1000 bytes
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` int(11) NOT NULL,
|
||||
`b` varchar(2048) DEFAULT NULL,
|
||||
KEY `a` (`a`) KEY_BLOCK_SIZE=8192,
|
||||
KEY `b` (`b`(1208)) KEY_BLOCK_SIZE=8192
|
||||
KEY `b` (`b`(1000)) KEY_BLOCK_SIZE=8192
|
||||
) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=0 KEY_BLOCK_SIZE=1024
|
||||
alter table t1 key_block_size=2048;
|
||||
show create table t1;
|
||||
@ -1839,7 +1839,7 @@ t1 CREATE TABLE `t1` (
|
||||
`a` int(11) NOT NULL,
|
||||
`b` varchar(2048) DEFAULT NULL,
|
||||
KEY `a` (`a`) KEY_BLOCK_SIZE=8192,
|
||||
KEY `b` (`b`(1208)) KEY_BLOCK_SIZE=8192
|
||||
KEY `b` (`b`(1000)) KEY_BLOCK_SIZE=8192
|
||||
) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=0 KEY_BLOCK_SIZE=2048
|
||||
alter table t1 add c int, add key (c);
|
||||
show create table t1;
|
||||
@ -1849,7 +1849,7 @@ t1 CREATE TABLE `t1` (
|
||||
`b` varchar(2048) DEFAULT NULL,
|
||||
`c` int(11) DEFAULT NULL,
|
||||
KEY `a` (`a`) KEY_BLOCK_SIZE=8192,
|
||||
KEY `b` (`b`(1208)) KEY_BLOCK_SIZE=8192,
|
||||
KEY `b` (`b`(1000)) KEY_BLOCK_SIZE=8192,
|
||||
KEY `c` (`c`) KEY_BLOCK_SIZE=8192
|
||||
) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=0 KEY_BLOCK_SIZE=2048
|
||||
alter table t1 key_block_size=0;
|
||||
@ -1862,33 +1862,33 @@ t1 CREATE TABLE `t1` (
|
||||
`c` int(11) DEFAULT NULL,
|
||||
`d` int(11) DEFAULT NULL,
|
||||
KEY `a` (`a`) KEY_BLOCK_SIZE=8192,
|
||||
KEY `b` (`b`(1208)) KEY_BLOCK_SIZE=8192,
|
||||
KEY `b` (`b`(1000)) KEY_BLOCK_SIZE=8192,
|
||||
KEY `c` (`c`) KEY_BLOCK_SIZE=8192,
|
||||
KEY `d` (`d`)
|
||||
) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=0
|
||||
drop table t1;
|
||||
create table t1 (a int not null, b varchar(2048), key (a), key(b)) key_block_size=8192;
|
||||
Warnings:
|
||||
Warning 1071 Specified key was too long; max key length is 1208 bytes
|
||||
Warning 1071 Specified key was too long; max key length is 1000 bytes
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` int(11) NOT NULL,
|
||||
`b` varchar(2048) DEFAULT NULL,
|
||||
KEY `a` (`a`),
|
||||
KEY `b` (`b`(1208))
|
||||
KEY `b` (`b`(1000))
|
||||
) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=0 KEY_BLOCK_SIZE=8192
|
||||
drop table t1;
|
||||
create table t1 (a int not null, b varchar(2048), key (a) key_block_size=1024, key(b)) key_block_size=8192;
|
||||
Warnings:
|
||||
Warning 1071 Specified key was too long; max key length is 1208 bytes
|
||||
Warning 1071 Specified key was too long; max key length is 1000 bytes
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` int(11) NOT NULL,
|
||||
`b` varchar(2048) DEFAULT NULL,
|
||||
KEY `a` (`a`),
|
||||
KEY `b` (`b`(1208))
|
||||
KEY `b` (`b`(1000))
|
||||
) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=0 KEY_BLOCK_SIZE=8192
|
||||
drop table t1;
|
||||
create table t1 (a int not null, b int, key (a) key_block_size=1024, key(b) key_block_size=8192) key_block_size=16384;
|
||||
@ -1911,12 +1911,12 @@ t1 CREATE TABLE `t1` (
|
||||
drop table t1;
|
||||
create table t1 (a varchar(2048), key `a` (a) key_block_size=1000000000000000000);
|
||||
Warnings:
|
||||
Warning 1071 Specified key was too long; max key length is 1208 bytes
|
||||
Warning 1071 Specified key was too long; max key length is 1000 bytes
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` varchar(2048) DEFAULT NULL,
|
||||
KEY `a` (`a`(1208)) KEY_BLOCK_SIZE=8192
|
||||
KEY `a` (`a`(1000)) KEY_BLOCK_SIZE=8192
|
||||
) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=0
|
||||
drop table t1;
|
||||
create table t1 (a int not null, key `a` (a) key_block_size=1025);
|
||||
|
@ -17,12 +17,12 @@ t1 CREATE TABLE `t1` (
|
||||
drop table t1;
|
||||
create table t1 (a varchar(2048), key `a` (a) key_block_size=1000000000000000000);
|
||||
Warnings:
|
||||
Warning 1071 Specified key was too long; max key length is 1208 bytes
|
||||
Warning 1071 Specified key was too long; max key length is 1000 bytes
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` varchar(2048) DEFAULT NULL,
|
||||
KEY `a` (`a`(1208)) KEY_BLOCK_SIZE=8192
|
||||
KEY `a` (`a`(1000)) KEY_BLOCK_SIZE=8192
|
||||
) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=0
|
||||
drop table t1;
|
||||
create table t1 (a int not null, key `a` (a) key_block_size=1025);
|
||||
@ -620,6 +620,53 @@ ERROR 23000: Duplicate entry '2' for key 'a'
|
||||
insert into t1 values(3);
|
||||
insert into t2 values(3);
|
||||
drop table t1, t2;
|
||||
CREATE TABLE t1 (
|
||||
a INT PRIMARY KEY,
|
||||
b CHAR(255),
|
||||
c VARCHAR(2048),
|
||||
d VARCHAR(18990),
|
||||
e CHAR(128),
|
||||
f CHAR(192)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
INSERT INTO t1 VALUES
|
||||
(1,'A','B','C','','D'),
|
||||
(2,'Abcdefghi','E','F','','G');
|
||||
CREATE TABLE t2 (
|
||||
g INT PRIMARY KEY,
|
||||
h CHAR(32),
|
||||
i CHAR(255),
|
||||
j TEXT
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
INSERT INTO t2 VALUES (1,'M','','H'),
|
||||
(2,'N','','H');
|
||||
SELECT * FROM t1, t2 WHERE a = g ORDER BY b;
|
||||
a b c d e f g h i j
|
||||
1 A B C D 1 M H
|
||||
2 Abcdefghi E F G 2 N H
|
||||
drop table t1,t2;
|
||||
CREATE TABLE t1 ( a VARCHAR(800),KEY(a) )
|
||||
ENGINE=Aria DEFAULT CHARACTER SET latin1;
|
||||
INSERT INTO t1 VALUES
|
||||
(REPEAT('abc ',200)), (REPEAT('def ',200)),
|
||||
(REPEAT('ghi ',200)), (REPEAT('jkl ',200));
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
ALTER TABLE t1 MODIFY a VARCHAR(800) CHARSET `ucs2`;
|
||||
Warnings:
|
||||
Warning 1071 Specified key was too long; max key length is 1000 bytes
|
||||
Warning 1071 Specified key was too long; max key length is 1000 bytes
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SHOW CREATE table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` varchar(800) CHARACTER SET ucs2 DEFAULT NULL,
|
||||
KEY `a` (`a`(500))
|
||||
) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
|
||||
DROP TABLE t1;
|
||||
create table t1 (a int) engine=aria;
|
||||
lock table t1 write;
|
||||
drop table t1;
|
||||
|
@ -523,8 +523,58 @@ insert into t2 values(3);
|
||||
connection default;
|
||||
drop table t1, t2;
|
||||
|
||||
#
|
||||
# BUG#909635 - MariaDB crashes on a select with long varchar and blob fields
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (
|
||||
a INT PRIMARY KEY,
|
||||
b CHAR(255),
|
||||
c VARCHAR(2048),
|
||||
d VARCHAR(18990),
|
||||
e CHAR(128),
|
||||
f CHAR(192)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
INSERT INTO t1 VALUES
|
||||
(1,'A','B','C','','D'),
|
||||
(2,'Abcdefghi','E','F','','G');
|
||||
|
||||
CREATE TABLE t2 (
|
||||
g INT PRIMARY KEY,
|
||||
h CHAR(32),
|
||||
i CHAR(255),
|
||||
j TEXT
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
INSERT INTO t2 VALUES (1,'M','','H'),
|
||||
(2,'N','','H');
|
||||
|
||||
SELECT * FROM t1, t2 WHERE a = g ORDER BY b;
|
||||
drop table t1,t2;
|
||||
|
||||
# End of 5.1 tests
|
||||
|
||||
#
|
||||
# bug#905716: Assertion `page->size <= share->max_index_block_size'
|
||||
#
|
||||
|
||||
CREATE TABLE t1 ( a VARCHAR(800),KEY(a) )
|
||||
ENGINE=Aria DEFAULT CHARACTER SET latin1;
|
||||
INSERT INTO t1 VALUES
|
||||
(REPEAT('abc ',200)), (REPEAT('def ',200)),
|
||||
(REPEAT('ghi ',200)), (REPEAT('jkl ',200));
|
||||
INSERT INTO t1 SELECT * FROM t1;
|
||||
# check table is not needed to reproduce the problem,
|
||||
# but shows that by this time the table appears to be okay.
|
||||
CHECK TABLE t1;
|
||||
ALTER TABLE t1 MODIFY a VARCHAR(800) CHARSET `ucs2`;
|
||||
CHECK TABLE t1;
|
||||
SHOW CREATE table t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
# End of 5.2 tests
|
||||
|
||||
create table t1 (a int) engine=aria;
|
||||
lock table t1 write;
|
||||
drop table t1;
|
||||
|
File diff suppressed because one or more lines are too long
@ -589,9 +589,17 @@ ORDER BY t1.f1;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
||||
--echo #
|
||||
--echo # LP bug:938518 HAVING does not reject the result of aggregation
|
||||
--echo #
|
||||
CREATE TABLE t1 (pk INT PRIMARY KEY, a INT);
|
||||
INSERT INTO t1 VALUES (2,7), (4,7), (6,2), (17,0);
|
||||
SELECT MIN(t.pk) FROM t1, t1 as t WHERE t1.pk = 1;
|
||||
SELECT MIN(t.pk) FROM t1, t1 as t WHERE t1.pk = 1 HAVING MIN(t.pk) < 10;
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # LP bug #791761: MAX over an empty join + HAVING
|
||||
--echo #
|
||||
@ -616,3 +624,36 @@ SELECT MAX(t1.b) AS f FROM t1 JOIN t2 ON t2.a != 0
|
||||
WHERE (SELECT f3 FROM t3) <> 0 HAVING f <> 6 ;
|
||||
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
||||
--echo #
|
||||
--echo # LP bug:806955 HAVING not observed with aggregate +subquery
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (f3 int, f10 varchar(1), f11 int, KEY (f10) );
|
||||
INSERT INTO t1 VALUES (NULL,'a',0),(8,'b',0);
|
||||
|
||||
CREATE TABLE t2 (f2 int);
|
||||
INSERT INTO t2 VALUES (7);
|
||||
|
||||
CREATE TABLE t3 (f3 int);
|
||||
INSERT INTO t3 VALUES (0),(8);
|
||||
|
||||
set @save_optimizer_switch=@@optimizer_switch;
|
||||
set optimizer_switch='semijoin=off,materialization=off';
|
||||
|
||||
SELECT MIN( t1.f10 ) AS field1
|
||||
FROM t1 , t2
|
||||
WHERE t2.f2 IN ( SELECT f3 FROM t3 )
|
||||
HAVING field1 < 's';
|
||||
|
||||
explain extended
|
||||
SELECT MIN( t1.f10 ) AS field1
|
||||
FROM t1 , t2
|
||||
WHERE t2.f2 IN ( SELECT f3 FROM t3 )
|
||||
HAVING field1 < 's';
|
||||
|
||||
set optimizer_switch=@save_optimizer_switch;
|
||||
|
||||
drop table t1,t2,t3;
|
||||
|
||||
--echo End of 5.2 tests
|
||||
|
@ -941,7 +941,6 @@ SELECT f1 , MIN(f2) FROM v2 GROUP BY f1;
|
||||
drop table t1,t2;
|
||||
drop view v1,v2;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # BUG#47217 Lost optimization caused slowdown & wrong result.
|
||||
--echo #
|
||||
@ -963,6 +962,46 @@ DROP TABLE t1, t2;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
||||
--echo #
|
||||
--echo # Bug #43368: STRAIGHT_JOIN DOESN'T WORK FOR NESTED JOINS
|
||||
--echo #
|
||||
|
||||
create table t1(c1 int primary key, c2 char(10)) engine=myisam;
|
||||
create table t2(c1 int primary key, c2 char(10), ref_t1 int) engine=myisam;
|
||||
create table t3(c1 int primary key, c2 char(10), ref_t1 int) engine=myisam;
|
||||
create table t4(c1 int primary key, c2 char(10), ref_t1 int) engine=myisam;
|
||||
insert into t1 values(1,'a');
|
||||
insert into t2 values(1,'a', 1);
|
||||
insert into t3 values(1,'a', 1);
|
||||
insert into t3 values(2,'b',2);
|
||||
insert into t4 values(1,'a', 1);
|
||||
insert into t4 values(2,'a', 2);
|
||||
insert into t4 values(3,'a', 3);
|
||||
insert into t4 values(4,'a', 4);
|
||||
insert into t1 values(2,'b');
|
||||
insert into t1 values(3,'c');
|
||||
|
||||
EXPLAIN
|
||||
SELECT *
|
||||
FROM t4 JOIN
|
||||
(t1 JOIN t3 ON t3.ref_t1=t1.c1 JOIN t2 ON t2.ref_t1=t1.c1)
|
||||
ON t4.ref_t1=t1.c1;
|
||||
|
||||
EXPLAIN
|
||||
SELECT STRAIGHT_JOIN *
|
||||
FROM t4 JOIN
|
||||
(t1 JOIN t3 ON t3.ref_t1=t1.c1 JOIN t2 ON t2.ref_t1=t1.c1)
|
||||
ON t4.ref_t1=t1.c1;
|
||||
|
||||
EXPLAIN
|
||||
SELECT *
|
||||
FROM t4 STRAIGHT_JOIN
|
||||
(t1 JOIN t3 ON t3.ref_t1=t1.c1 JOIN t2 ON t2.ref_t1=t1.c1)
|
||||
ON t4.ref_t1=t1.c1;
|
||||
|
||||
drop table t1,t2,t3,t4;
|
||||
--echo End of 5.2 tests
|
||||
|
||||
--echo #
|
||||
--echo # BUG#724275: Crash in JOIN::optimize in maria-5.3
|
||||
--echo #
|
||||
|
@ -1486,4 +1486,65 @@ SET SESSION join_cache_level=default;
|
||||
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
||||
--echo #
|
||||
--echo # LP bug #943543: LEFT JOIN converted to JOIN with
|
||||
--echo # ORed IS NULL(primary key) in WHERE clause
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (
|
||||
a int, b int NOT NULL, pk int NOT NULL,
|
||||
PRIMARY KEY (pk), INDEX idx(b)
|
||||
);
|
||||
INSERT INTO t1 VALUES
|
||||
(NULL,1,1), (6,2,2), (5,3,3), (NULL,4,4),
|
||||
(1,9,6), (8,5,7), (NULL,8,8), (8,1,5);
|
||||
|
||||
CREATE TABLE t2 (pk int PRIMARY KEY);
|
||||
INSERT INTO t2 VALUES (3), (8), (5);
|
||||
|
||||
EXPLAIN EXTENDED
|
||||
SELECT t1.pk FROM t2 JOIN t1 ON t2.pk = t1.a
|
||||
WHERE t1.b BETWEEN 5 AND 6 AND t1.pk IS NULL OR t1.pk = 5
|
||||
ORDER BY t1.pk;
|
||||
SELECT t1.pk FROM t2 JOIN t1 ON t2.pk = t1.a
|
||||
WHERE t1.b BETWEEN 5 AND 6 AND t1.pk IS NULL OR t1.pk = 5
|
||||
ORDER BY t1.pk;
|
||||
|
||||
EXPLAIN EXTENDED
|
||||
SELECT t1.pk FROM t2 LEFT JOIN t1 ON t2.pk = t1.a
|
||||
WHERE t1.b BETWEEN 5 AND 6 AND t1.pk IS NULL OR t1.pk = 5
|
||||
ORDER BY t1.pk;
|
||||
SELECT t1.pk FROM t2 LEFT JOIN t1 ON t2.pk = t1.a
|
||||
WHERE t1.b BETWEEN 5 AND 6 AND t1.pk IS NULL OR t1.pk = 5
|
||||
ORDER BY t1.pk;
|
||||
|
||||
DROP TABLE t2;
|
||||
|
||||
CREATE TABLE t2 (c int, d int, KEY (c));
|
||||
INSERT INTO t2 VALUES
|
||||
(3,30), (8,88), (5,50), (8,81),
|
||||
(4,40), (9,90), (7,70), (9,90),
|
||||
(13,130), (18,188), (15,150), (18,181),
|
||||
(14,140), (19,190), (17,170), (19,190);
|
||||
|
||||
INSERT INTO t1 VALUES (8,5,9);
|
||||
|
||||
EXPLAIN EXTENDED
|
||||
SELECT t1.b, t2.c, t2.d FROM t2 JOIN t1 ON t2.c = t1.a
|
||||
WHERE t1.pk BETWEEN 5 AND 6 AND t1.b IS NULL OR t1.b = 5
|
||||
ORDER BY t1.b;
|
||||
SELECT t1.b, t2.c, t2.d FROM t2 JOIN t1 ON t2.c = t1.a
|
||||
WHERE t1.pk BETWEEN 5 AND 6 AND t1.b IS NULL OR t1.b = 5
|
||||
ORDER BY t1.b;
|
||||
|
||||
EXPLAIN EXTENDED
|
||||
SELECT t1.b, t2.c, t2.d FROM t2 LEFT JOIN t1 ON t2.c = t1.a
|
||||
WHERE t1.pk BETWEEN 5 AND 6 AND t1.b IS NULL OR t1.b = 5
|
||||
ORDER BY t1.b;
|
||||
SELECT t1.b, t2.c, t2.d FROM t2 LEFT JOIN t1 ON t2.c = t1.a
|
||||
WHERE t1.pk BETWEEN 5 AND 6 AND t1.b IS NULL OR t1.b = 5
|
||||
ORDER BY t1.b;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
SET optimizer_switch=@save_optimizer_switch;
|
||||
|
@ -76,3 +76,70 @@ SELECT STRAIGHT_JOIN t1.a FROM t1 RIGHT JOIN t2 ON t1.b = t2.b
|
||||
GROUP BY 1;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
--echo #
|
||||
--echo Bug #59487: WRONG RESULT WITH STRAIGHT_JOIN AND RIGHT JOIN
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (
|
||||
pk int(11) NOT NULL,
|
||||
col_varchar_10_latin1_key varchar(10) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
INSERT INTO t1 VALUES (1,'1');
|
||||
CREATE TABLE t2 (
|
||||
pk int(11) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
INSERT INTO t2 VALUES (1);
|
||||
CREATE TABLE t3 (
|
||||
pk int(11) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
INSERT INTO t3 VALUES (1);
|
||||
CREATE TABLE t4 (
|
||||
pk int(11) NOT NULL,
|
||||
col_int int(11) DEFAULT NULL,
|
||||
col_int_key int(11) DEFAULT NULL,
|
||||
col_varchar_10_latin1_key varchar(10) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
INSERT INTO t4 VALUES (1,1,1,'1');
|
||||
CREATE TABLE t5 (
|
||||
col_int int(11) DEFAULT NULL,
|
||||
col_varchar_10_utf8_key varchar(10) CHARACTER SET utf8 DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
INSERT INTO t5 VALUES (1,'1');
|
||||
CREATE TABLE t6 (
|
||||
col_int_key int(11) DEFAULT NULL,
|
||||
col_varchar_10_latin1_key varchar(10) DEFAULT NULL,
|
||||
pk int(11) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
INSERT INTO t6 VALUES (1,'1',1);
|
||||
|
||||
# EXPLAIN of query above (t2 is before t5 in plan)
|
||||
|
||||
let $rest_of_query=t6a.pk, t2.pk
|
||||
FROM t6 AS t6a
|
||||
LEFT JOIN
|
||||
(
|
||||
t2
|
||||
RIGHT JOIN
|
||||
(
|
||||
(t1 LEFT JOIN (t4 JOIN t3 ON t4.col_int) ON t4.col_int_key = t1.pk)
|
||||
LEFT JOIN
|
||||
(t5 JOIN t6 AS t6b
|
||||
ON t5.col_varchar_10_utf8_key = t6b.col_varchar_10_latin1_key)
|
||||
ON t1.pk = t5.col_int
|
||||
)
|
||||
ON t4.col_varchar_10_latin1_key = t1.col_varchar_10_latin1_key
|
||||
AND t5.col_varchar_10_utf8_key = 0
|
||||
)
|
||||
ON t6a.pk IS TRUE
|
||||
WHERE t6b.col_int_key IS TRUE;
|
||||
|
||||
eval SELECT STRAIGHT_JOIN $rest_of_query;
|
||||
eval EXPLAIN SELECT STRAIGHT_JOIN $rest_of_query;
|
||||
|
||||
# right result (same query, just remove STRAIGHT_JOIN):
|
||||
|
||||
eval SELECT $rest_of_query;
|
||||
eval EXPLAIN SELECT $rest_of_query;
|
||||
|
||||
drop table t1,t2,t3,t4,t5,t6;
|
||||
|
@ -1370,39 +1370,6 @@ WHERE t2.f2 = (SELECT f2 FROM t3
|
||||
|
||||
drop table t1,t2,t3,t4;
|
||||
|
||||
--echo #
|
||||
--echo # LP BUG#806943 Second crash with select_describe with nested subqueries in maria-5.3
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 ( f4 int) ;
|
||||
INSERT INTO t1 VALUES (0),(0);
|
||||
|
||||
CREATE TABLE t2 ( f2 int) ;
|
||||
|
||||
CREATE TABLE t3 ( f1 int NOT NULL );
|
||||
|
||||
CREATE TABLE t4 ( f2 int, f3 int) ;
|
||||
INSERT INTO t4 VALUES (8,0),(3,0);
|
||||
|
||||
EXPLAIN SELECT *
|
||||
FROM t2, t3
|
||||
WHERE t3.f1 = (
|
||||
SELECT SUM( f2 )
|
||||
FROM t4
|
||||
WHERE EXISTS (
|
||||
SELECT DISTINCT f4
|
||||
FROM t1));
|
||||
SELECT *
|
||||
FROM t2, t3
|
||||
WHERE t3.f1 = (
|
||||
SELECT SUM( f2 )
|
||||
FROM t4
|
||||
WHERE EXISTS (
|
||||
SELECT DISTINCT f4
|
||||
FROM t1));
|
||||
|
||||
drop table t1, t2, t3, t4;
|
||||
|
||||
--echo #
|
||||
--echo # LP BUG#611690 Crash in select_describe() with nested subqueries
|
||||
--echo #
|
||||
@ -1665,6 +1632,22 @@ WHERE t2.b IN (SELECT t3.b FROM t3 WHERE t3.a < ANY (SELECT t4.a FROM t4) and t3
|
||||
|
||||
drop table t2, t3, t4;
|
||||
|
||||
--echo #
|
||||
--echo # BUG#934597: Assertion `! is_set()' failed in Diagnostics_area::set_ok_status(THD...
|
||||
--echo #
|
||||
CREATE TABLE t1 ( a VARCHAR(1) );
|
||||
INSERT INTO t1 VALUES ('u'),('k');
|
||||
--error ER_SUBQUERY_NO_1_ROW
|
||||
CREATE TABLE t2 AS
|
||||
SELECT a AS field1 FROM t1
|
||||
WHERE ( SELECT alias1.a
|
||||
FROM t1 AS alias1
|
||||
) IS NOT NULL;
|
||||
--error ER_BAD_TABLE_ERROR
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
set optimizer_switch=@subselect4_tmp;
|
||||
|
||||
SET optimizer_switch= @@global.optimizer_switch;
|
||||
|
@ -1559,6 +1559,49 @@ WHERE a IN (
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # BUG#938131: Subquery materialization is not used in CREATE TABLE SELECT
|
||||
--echo #
|
||||
CREATE TABLE t1(a int);
|
||||
INSERT INTO t1 values(1),(2);
|
||||
CREATE TABLE t2(a int);
|
||||
INSERT INTO t2 values(1),(2);
|
||||
--echo # Should use Materialization:
|
||||
EXPLAIN SELECT * FROM t1 WHERE a IN (SELECT * FROM t2 GROUP BY a HAVING a > 1);
|
||||
flush status;
|
||||
CREATE TABLE t3 SELECT * FROM t1 WHERE a IN (SELECT * FROM t2 GROUP BY a HAVING a > 1);
|
||||
SHOW STATUS LIKE 'Created_tmp_tables';
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
||||
--echo #
|
||||
--echo # BUG#939009: Crash with aggregate function in IN subquery
|
||||
--echo #
|
||||
|
||||
SET @save_optimizer_switch=@@optimizer_switch;
|
||||
SET optimizer_switch='materialization=on,semijoin=on';
|
||||
|
||||
CREATE TABLE t1 (a int, b int);
|
||||
INSERT INTO t1 VALUES (7,1), (4,2), (7,7);
|
||||
|
||||
CREATE TABLE t2 ( c INT );
|
||||
INSERT INTO t2 VALUES (4), (7), (6);
|
||||
|
||||
EXPLAIN EXTENDED
|
||||
SELECT * FROM t1
|
||||
WHERE a IN (SELECT MAX(c) FROM t2) AND b=7 AND (a IS NULL OR a=b);
|
||||
SELECT * FROM t1
|
||||
WHERE a IN (SELECT MAX(c) FROM t2) AND b=7 AND (a IS NULL OR a=b);
|
||||
|
||||
EXPLAIN
|
||||
SELECT * FROM t1
|
||||
WHERE a IN (SELECT MAX(c) FROM t2 WHERE c < 4) AND b=7 AND (a IS NULL OR a=b);
|
||||
SELECT * FROM t1
|
||||
WHERE a IN (SELECT MAX(c) FROM t2 WHERE c < 4) AND b=7 AND (a IS NULL OR a=b);
|
||||
|
||||
SET optimizer_switch=@save_optimizer_switch;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
--echo # This must be at the end:
|
||||
set optimizer_switch=@subselect_sj_mat_tmp;
|
||||
set join_cache_level=@save_join_cache_level;
|
||||
|
@ -163,3 +163,20 @@ DROP TABLE t1;
|
||||
--echo #
|
||||
|
||||
--echo End of 5.1 tests
|
||||
#
|
||||
# fun with convert_const_to_int
|
||||
# in some cases 00 is equal to 2000, in others it is not.
|
||||
#
|
||||
create function y2k() returns int deterministic return 2000;
|
||||
create table t1 (a year(2), b int);
|
||||
insert t1 values (0,2000);
|
||||
select a from t1 where a=2000; # constant.
|
||||
select a from t1 where a=1000+1000; # still a constant.
|
||||
# select a from t1 where a=(select 2000); # even this is a constant
|
||||
select a from t1 where a=(select 2000 from dual where 1); # constant, but "expensive"
|
||||
select a from t1 where a=y2k(); # constant, but "expensive"
|
||||
select a from t1 where a=b; # not a constant
|
||||
drop table t1;
|
||||
drop function y2k;
|
||||
|
||||
|
||||
|
@ -5903,6 +5903,10 @@ int init_key_cache(KEY_CACHE *keycache, uint key_cache_block_size,
|
||||
((PARTITIONED_KEY_CACHE_CB *) keycache_cb)->partitions :
|
||||
0;
|
||||
DBUG_ASSERT(partitions <= MAX_KEY_CACHE_PARTITIONS);
|
||||
keycache->key_cache_mem_size=
|
||||
keycache->partitions ?
|
||||
((PARTITIONED_KEY_CACHE_CB *) keycache_cb)->key_cache_mem_size :
|
||||
((SIMPLE_KEY_CACHE_CB *) keycache_cb)->key_cache_mem_size;
|
||||
if (blocks > 0)
|
||||
keycache->can_be_used= 1;
|
||||
return blocks;
|
||||
@ -5966,6 +5970,11 @@ int resize_key_cache(KEY_CACHE *keycache, uint key_cache_block_size,
|
||||
((PARTITIONED_KEY_CACHE_CB *)(keycache->keycache_cb))->partitions;
|
||||
}
|
||||
|
||||
keycache->key_cache_mem_size=
|
||||
keycache->partitions ?
|
||||
((PARTITIONED_KEY_CACHE_CB *)(keycache->keycache_cb))->key_cache_mem_size :
|
||||
((SIMPLE_KEY_CACHE_CB *)(keycache->keycache_cb))->key_cache_mem_size;
|
||||
|
||||
keycache->can_be_used= (blocks >= 0);
|
||||
}
|
||||
return blocks;
|
||||
|
@ -117,6 +117,11 @@ static void do_outer_field_to_null_str(Copy_field *copy)
|
||||
int
|
||||
set_field_to_null(Field *field)
|
||||
{
|
||||
if (field->table->null_catch_flags & CHECK_ROW_FOR_NULLS_TO_REJECT)
|
||||
{
|
||||
field->table->null_catch_flags|= REJECT_ROW_DUE_TO_NULL_FIELDS;
|
||||
return -1;
|
||||
}
|
||||
if (field->real_maybe_null())
|
||||
{
|
||||
field->set_null();
|
||||
@ -160,6 +165,11 @@ set_field_to_null(Field *field)
|
||||
int
|
||||
set_field_to_null_with_conversions(Field *field, bool no_conversions)
|
||||
{
|
||||
if (field->table->null_catch_flags & CHECK_ROW_FOR_NULLS_TO_REJECT)
|
||||
{
|
||||
field->table->null_catch_flags|= REJECT_ROW_DUE_TO_NULL_FIELDS;
|
||||
return -1;
|
||||
}
|
||||
if (field->real_maybe_null())
|
||||
{
|
||||
field->set_null();
|
||||
|
@ -1158,7 +1158,6 @@ public:
|
||||
virtual bool update_table_bitmaps_processor(uchar *arg) { return 0; }
|
||||
virtual bool view_used_tables_processor(uchar *arg) { return 0; }
|
||||
virtual bool eval_not_null_tables(uchar *opt_arg) { return 0; }
|
||||
virtual bool clear_sum_processor(uchar *opt_arg) { return 0; }
|
||||
virtual bool is_subquery_processor (uchar *opt_arg) { return 0; }
|
||||
virtual bool limit_index_condition_pushdown_processor(uchar *opt_arg)
|
||||
{
|
||||
|
@ -4194,6 +4194,11 @@ bool subselect_hash_sj_engine::init(List<Item> *tmp_columns, uint subquery_id)
|
||||
memcpy(name, buf, len+1);
|
||||
|
||||
result_sink->get_tmp_table_param()->materialized_subquery= true;
|
||||
if (item->substype() == Item_subselect::IN_SUBS &&
|
||||
((Item_in_subselect*)item)->is_jtbm_merged)
|
||||
{
|
||||
result_sink->get_tmp_table_param()->force_not_null_cols= true;
|
||||
}
|
||||
if (result_sink->create_result_table(thd, tmp_columns, TRUE,
|
||||
tmp_create_options,
|
||||
name, TRUE, TRUE))
|
||||
|
@ -547,7 +547,6 @@ public:
|
||||
{
|
||||
return trace_unsupported_by_check_vcol_func_processor(func_name());
|
||||
}
|
||||
bool clear_sum_processor(uchar *arg) { clear(); return 0; }
|
||||
};
|
||||
|
||||
|
||||
|
@ -268,8 +268,8 @@ bool is_materialization_applicable(THD *thd, Item_in_subselect *in_subs,
|
||||
Subquery !contains {GROUP BY, ORDER BY [LIMIT],
|
||||
aggregate functions}) && subquery predicate is not under "NOT IN"))
|
||||
|
||||
(*) The subquery must be part of a SELECT statement. The current
|
||||
condition also excludes multi-table update statements.
|
||||
(*) The subquery must be part of a SELECT or CREATE TABLE ... SELECT statement.
|
||||
The current condition also excludes multi-table update statements.
|
||||
A note about prepared statements: we want the if-branch to be taken on
|
||||
PREPARE and each EXECUTE. The rewrites are only done once, but we need
|
||||
select_lex->sj_subselects list to be populated for every EXECUTE.
|
||||
@ -278,7 +278,8 @@ bool is_materialization_applicable(THD *thd, Item_in_subselect *in_subs,
|
||||
if (optimizer_flag(thd, OPTIMIZER_SWITCH_MATERIALIZATION) && // 0
|
||||
!child_select->is_part_of_union() && // 1
|
||||
parent_unit->first_select()->leaf_tables.elements && // 2
|
||||
thd->lex->sql_command == SQLCOM_SELECT && // *
|
||||
(thd->lex->sql_command == SQLCOM_SELECT || // *
|
||||
thd->lex->sql_command == SQLCOM_CREATE_TABLE) && // *
|
||||
child_select->outer_select()->leaf_tables.elements && // 2A
|
||||
subquery_types_allow_materialization(in_subs) &&
|
||||
(in_subs->is_top_level_item() || //3
|
||||
@ -3184,6 +3185,7 @@ bool setup_sj_materialization_part1(JOIN_TAB *sjm_tab)
|
||||
sjm->sjm_table_cols.push_back(*p_item);
|
||||
|
||||
sjm->sjm_table_param.field_count= subq_select->item_list.elements;
|
||||
sjm->sjm_table_param.force_not_null_cols= TRUE;
|
||||
|
||||
if (!(sjm->table= create_tmp_table(thd, &sjm->sjm_table_param,
|
||||
sjm->sjm_table_cols, (ORDER*) 0,
|
||||
|
@ -3434,6 +3434,11 @@ int select_materialize_with_stats::send_data(List<Item> &items)
|
||||
|
||||
if ((res= select_union::send_data(items)))
|
||||
return res;
|
||||
if (table->null_catch_flags & REJECT_ROW_DUE_TO_NULL_FIELDS)
|
||||
{
|
||||
table->null_catch_flags&= ~REJECT_ROW_DUE_TO_NULL_FIELDS;
|
||||
return 0;
|
||||
}
|
||||
/* Skip duplicate rows. */
|
||||
if (write_err == HA_ERR_FOUND_DUPP_KEY ||
|
||||
write_err == HA_ERR_FOUND_DUPP_UNIQUE)
|
||||
@ -3475,6 +3480,7 @@ void TMP_TABLE_PARAM::init()
|
||||
precomputed_group_by= 0;
|
||||
bit_fields_as_long= 0;
|
||||
materialized_subquery= 0;
|
||||
force_not_null_cols= 0;
|
||||
skip_create_table= 0;
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
@ -3458,6 +3458,8 @@ public:
|
||||
bool schema_table;
|
||||
/* TRUE if the temp table is created for subquery materialization. */
|
||||
bool materialized_subquery;
|
||||
/* TRUE if all columns of the table are guaranteed to be non-nullable */
|
||||
bool force_not_null_cols;
|
||||
/*
|
||||
True if GROUP BY and its aggregate functions are already computed
|
||||
by a table access method (e.g. by loose index scan). In this case
|
||||
@ -3481,7 +3483,8 @@ public:
|
||||
TMP_TABLE_PARAM()
|
||||
:copy_field(0), group_parts(0),
|
||||
group_length(0), group_null_parts(0), convert_blob_length(0),
|
||||
schema_table(0), materialized_subquery(0), precomputed_group_by(0),
|
||||
schema_table(0), materialized_subquery(0), force_not_null_cols(0),
|
||||
precomputed_group_by(0),
|
||||
force_copy_fields(0), bit_fields_as_long(0), skip_create_table(0)
|
||||
{}
|
||||
~TMP_TABLE_PARAM()
|
||||
|
@ -126,7 +126,7 @@ static int return_zero_rows(JOIN *join, select_result *res,
|
||||
List<TABLE_LIST> &tables,
|
||||
List<Item> &fields, bool send_row,
|
||||
ulonglong select_options, const char *info,
|
||||
Item *having);
|
||||
Item *having, List<Item> &all_fields);
|
||||
static COND *build_equal_items(THD *thd, COND *cond,
|
||||
COND_EQUAL *inherited,
|
||||
List<TABLE_LIST> *join_list,
|
||||
@ -2201,6 +2201,15 @@ JOIN::exec()
|
||||
!exec_const_cond->val_int())
|
||||
zero_result_cause= "Impossible WHERE noticed after reading const tables";
|
||||
|
||||
/*
|
||||
We've called exec_const_cond->val_int(). This may have caused an error.
|
||||
*/
|
||||
if (thd->is_error())
|
||||
{
|
||||
error= thd->is_error();
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
if (zero_result_cause)
|
||||
{
|
||||
(void) return_zero_rows(this, result, select_lex->leaf_tables,
|
||||
@ -2208,7 +2217,7 @@ JOIN::exec()
|
||||
send_row_on_empty_set(),
|
||||
select_options,
|
||||
zero_result_cause,
|
||||
having ? having : tmp_having);
|
||||
having ? having : tmp_having, all_fields);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
@ -3784,15 +3793,18 @@ merge_key_fields(KEY_FIELD *start,KEY_FIELD *new_fields,KEY_FIELD *end,
|
||||
{
|
||||
/* field = expression OR field IS NULL */
|
||||
old->level= and_level;
|
||||
old->optimize= KEY_OPTIMIZE_REF_OR_NULL;
|
||||
if (old->field->maybe_null())
|
||||
{
|
||||
old->optimize= KEY_OPTIMIZE_REF_OR_NULL;
|
||||
/* The referred expression can be NULL: */
|
||||
old->null_rejecting= 0;
|
||||
}
|
||||
/*
|
||||
Remember the NOT NULL value unless the value does not depend
|
||||
on other tables.
|
||||
*/
|
||||
if (!old->val->used_tables() && old->val->is_null())
|
||||
old->val= new_fields->val;
|
||||
/* The referred expression can be NULL: */
|
||||
old->null_rejecting= 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -10566,7 +10578,7 @@ ORDER *simple_remove_const(ORDER *order, COND *where)
|
||||
static int
|
||||
return_zero_rows(JOIN *join, select_result *result, List<TABLE_LIST> &tables,
|
||||
List<Item> &fields, bool send_row, ulonglong select_options,
|
||||
const char *info, Item *having)
|
||||
const char *info, Item *having, List<Item> &all_fields)
|
||||
{
|
||||
DBUG_ENTER("return_zero_rows");
|
||||
|
||||
@ -10596,9 +10608,15 @@ return_zero_rows(JOIN *join, select_result *result, List<TABLE_LIST> &tables,
|
||||
if (!table->is_jtbm())
|
||||
mark_as_null_row(table->table); // All fields are NULL
|
||||
}
|
||||
if (having &&
|
||||
!having->walk(&Item::clear_sum_processor, FALSE, NULL) &&
|
||||
having->val_int() == 0)
|
||||
List_iterator_fast<Item> it(all_fields);
|
||||
Item *item;
|
||||
/*
|
||||
Inform all items (especially aggregating) to calculate HAVING correctly,
|
||||
also we will need it for sending results.
|
||||
*/
|
||||
while ((item= it++))
|
||||
item->no_rows_in_result();
|
||||
if (having && having->val_int() == 0)
|
||||
send_row=0;
|
||||
}
|
||||
if (!(result->send_result_set_metadata(fields,
|
||||
@ -10606,13 +10624,7 @@ return_zero_rows(JOIN *join, select_result *result, List<TABLE_LIST> &tables,
|
||||
{
|
||||
bool send_error= FALSE;
|
||||
if (send_row)
|
||||
{
|
||||
List_iterator_fast<Item> it(fields);
|
||||
Item *item;
|
||||
while ((item= it++))
|
||||
item->no_rows_in_result();
|
||||
send_error= result->send_data(fields) > 0;
|
||||
}
|
||||
if (!send_error)
|
||||
result->send_eof(); // Should be safe
|
||||
}
|
||||
@ -12400,6 +12412,7 @@ simplify_joins(JOIN *join, List<TABLE_LIST> *join_list, COND *conds, bool top,
|
||||
tbl->table->maybe_null= FALSE;
|
||||
tbl->join_list= table->join_list;
|
||||
repl_list.push_back(tbl);
|
||||
tbl->dep_tables|= table->dep_tables;
|
||||
}
|
||||
li.replace(repl_list);
|
||||
/* Need to update the name resolution table chain when flattening joins */
|
||||
@ -13819,6 +13832,7 @@ create_tmp_table(THD *thd, TMP_TABLE_PARAM *param, List<Item> &fields,
|
||||
table->merge_keys.init();
|
||||
table->intersect_keys.init();
|
||||
table->keys_in_use_for_query.init();
|
||||
table->no_rows_with_nulls= param->force_not_null_cols;
|
||||
|
||||
table->s= share;
|
||||
init_tmp_table_share(thd, share, "", 0, tmpname, tmpname);
|
||||
@ -13900,6 +13914,11 @@ create_tmp_table(THD *thd, TMP_TABLE_PARAM *param, List<Item> &fields,
|
||||
thd->mem_root= mem_root_save;
|
||||
arg= sum_item->set_arg(i, thd, new Item_field(new_field));
|
||||
thd->mem_root= &table->mem_root;
|
||||
if (param->force_not_null_cols)
|
||||
{
|
||||
new_field->flags|= NOT_NULL_FLAG;
|
||||
new_field->null_ptr= NULL;
|
||||
}
|
||||
if (!(new_field->flags & NOT_NULL_FLAG))
|
||||
{
|
||||
null_count++;
|
||||
@ -13975,6 +13994,11 @@ create_tmp_table(THD *thd, TMP_TABLE_PARAM *param, List<Item> &fields,
|
||||
agg_item->result_field= new_field;
|
||||
}
|
||||
tmp_from_field++;
|
||||
if (param->force_not_null_cols)
|
||||
{
|
||||
new_field->flags|= NOT_NULL_FLAG;
|
||||
new_field->null_ptr= NULL;
|
||||
}
|
||||
reclength+=new_field->pack_length();
|
||||
if (!(new_field->flags & NOT_NULL_FLAG))
|
||||
null_count++;
|
||||
|
@ -59,9 +59,17 @@ int select_union::send_data(List<Item> &values)
|
||||
unit->offset_limit_cnt--;
|
||||
return 0;
|
||||
}
|
||||
if (table->no_rows_with_nulls)
|
||||
table->null_catch_flags= CHECK_ROW_FOR_NULLS_TO_REJECT;
|
||||
fill_record(thd, table->field, values, TRUE, FALSE);
|
||||
if (thd->is_error())
|
||||
return 1;
|
||||
if (table->no_rows_with_nulls)
|
||||
{
|
||||
table->null_catch_flags&= ~CHECK_ROW_FOR_NULLS_TO_REJECT;
|
||||
if (table->null_catch_flags)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((write_err= table->file->ha_write_tmp_row(table->record[0])))
|
||||
{
|
||||
|
23
sql/table.h
23
sql/table.h
@ -906,6 +906,9 @@ enum index_hint_type
|
||||
INDEX_HINT_FORCE
|
||||
};
|
||||
|
||||
#define CHECK_ROW_FOR_NULLS_TO_REJECT (1 << 0)
|
||||
#define REJECT_ROW_DUE_TO_NULL_FIELDS (1 << 1)
|
||||
|
||||
struct TABLE
|
||||
{
|
||||
TABLE() {} /* Remove gcc warning */
|
||||
@ -1054,6 +1057,26 @@ public:
|
||||
NULL, including columns declared as "not null" (see maybe_null).
|
||||
*/
|
||||
bool null_row;
|
||||
/*
|
||||
No rows that contain null values can be placed into this table.
|
||||
Currently this flag can be set to true only for a temporary table
|
||||
that used to store the result of materialization of a subquery.
|
||||
*/
|
||||
bool no_rows_with_nulls;
|
||||
/*
|
||||
This field can contain two bit flags:
|
||||
CHECK_ROW_FOR_NULLS_TO_REJECT
|
||||
REJECT_ROW_DUE_TO_NULL_FIELDS
|
||||
The first flag is set for the dynamic contexts where it is prohibited
|
||||
to write any null into the table.
|
||||
The second flag is set only if the first flag is set on.
|
||||
The informs the outer scope that there was an attept to write null
|
||||
into a field of the table in the context where it is prohibited.
|
||||
This flag should be set off as soon as the first flag is set on.
|
||||
Currently these flags are used only the tables tno_rows_with_nulls set
|
||||
to true.
|
||||
*/
|
||||
uint8 null_catch_flags;
|
||||
|
||||
/*
|
||||
TODO: Each of the following flags take up 8 bits. They can just as easily
|
||||
|
@ -1017,8 +1017,11 @@ double ha_maria::scan_time()
|
||||
splitting algorithms depends on this. (With only one key on a page
|
||||
we also can't use any compression, which may make the index file much
|
||||
larger)
|
||||
We use HA_MAX_KEY_BUFF as this is a stack restriction imposed by the
|
||||
handler interface.
|
||||
We use HA_MAX_KEY_LENGTH as this is a stack restriction imposed by the
|
||||
handler interface. If we want to increase this, we have also to
|
||||
increase HA_MARIA_KEY_BUFF and MARIA_MAX_KEY_BUFF as the buffer needs
|
||||
to take be able to store the extra lenght bytes that is part of the stored
|
||||
key.
|
||||
|
||||
We also need to reserve place for a record pointer (8) and 3 bytes
|
||||
per key segment to store the length of the segment + possible null bytes.
|
||||
@ -3022,7 +3025,7 @@ void ha_maria::get_auto_increment(ulonglong offset, ulonglong increment,
|
||||
{
|
||||
ulonglong nr;
|
||||
int error;
|
||||
uchar key[HA_MAX_KEY_LENGTH];
|
||||
uchar key[MARIA_MAX_KEY_BUFF];
|
||||
|
||||
if (!table->s->next_number_key_offset)
|
||||
{ // Autoincrement at key-start
|
||||
|
@ -31,7 +31,7 @@ MARIA_RECORD_POS maria_position(MARIA_HA *info)
|
||||
uint maria_max_key_length()
|
||||
{
|
||||
uint tmp= (_ma_max_key_length() - 8 - HA_MAX_KEY_SEG*3);
|
||||
return min(HA_MAX_KEY_BUFF, tmp);
|
||||
return min(HA_MAX_KEY_LENGTH, tmp);
|
||||
}
|
||||
|
||||
/* Get information about the table */
|
||||
|
@ -1107,7 +1107,7 @@ uint _ma_apply_redo_index(MARIA_HA *info,
|
||||
DBUG_PRINT("redo", ("org_page_length: %u new_page_length: %u",
|
||||
uint2korr(header), uint2korr(header+2)));
|
||||
DBUG_ASSERT(uint2korr(header) == page_length);
|
||||
new_page_length= uint2korr(header+2);
|
||||
new_page_length= min(uint2korr(header+2), max_page_size);
|
||||
header+= 4;
|
||||
break;
|
||||
case KEY_OP_MAX_PAGELENGTH:
|
||||
|
@ -1714,9 +1714,11 @@ my_bool _ma_columndef_write(File file, MARIA_COLUMNDEF *columndef)
|
||||
{
|
||||
uchar buff[MARIA_COLUMNDEF_SIZE];
|
||||
uchar *ptr=buff;
|
||||
uint low_offset= (uint) (columndef->offset & 0xffff);
|
||||
uint high_offset= (uint) (columndef->offset >> 16);
|
||||
|
||||
mi_int2store(ptr,(ulong) columndef->column_nr); ptr+= 2;
|
||||
mi_int2store(ptr,(ulong) columndef->offset); ptr+= 2;
|
||||
mi_int2store(ptr, low_offset); ptr+= 2;
|
||||
mi_int2store(ptr,columndef->type); ptr+= 2;
|
||||
mi_int2store(ptr,columndef->length); ptr+= 2;
|
||||
mi_int2store(ptr,columndef->fill_length); ptr+= 2;
|
||||
@ -1725,12 +1727,14 @@ my_bool _ma_columndef_write(File file, MARIA_COLUMNDEF *columndef)
|
||||
|
||||
(*ptr++)= columndef->null_bit;
|
||||
(*ptr++)= columndef->empty_bit;
|
||||
ptr[0]= ptr[1]= ptr[2]= ptr[3]= 0; ptr+= 4; /* For future */
|
||||
mi_int2store(ptr, high_offset); ptr+= 2;
|
||||
ptr[0]= ptr[1]= 0; ptr+= 2; /* For future */
|
||||
return mysql_file_write(file, buff, (size_t) (ptr-buff), MYF(MY_NABP)) != 0;
|
||||
}
|
||||
|
||||
uchar *_ma_columndef_read(uchar *ptr, MARIA_COLUMNDEF *columndef)
|
||||
{
|
||||
uint high_offset;
|
||||
columndef->column_nr= mi_uint2korr(ptr); ptr+= 2;
|
||||
columndef->offset= mi_uint2korr(ptr); ptr+= 2;
|
||||
columndef->type= mi_sint2korr(ptr); ptr+= 2;
|
||||
@ -1740,7 +1744,9 @@ uchar *_ma_columndef_read(uchar *ptr, MARIA_COLUMNDEF *columndef)
|
||||
columndef->empty_pos= mi_uint2korr(ptr); ptr+= 2;
|
||||
columndef->null_bit= (uint8) *ptr++;
|
||||
columndef->empty_bit= (uint8) *ptr++;
|
||||
ptr+= 4;
|
||||
high_offset= mi_uint2korr(ptr); ptr+= 2;
|
||||
columndef->offset|= ((ulong) high_offset << 16);
|
||||
ptr+= 2;
|
||||
return ptr;
|
||||
}
|
||||
|
||||
|
@ -1379,6 +1379,10 @@ uint _ma_get_binary_pack_key(MARIA_KEY *int_key, uint page_flag, uint nod_flag,
|
||||
memcpy(key, from, length + nod_flag);
|
||||
*page_pos= from + length + nod_flag;
|
||||
|
||||
#ifdef USEFUL_FOR_DEBUGGING
|
||||
DBUG_DUMP("key", int_key->data,
|
||||
(uint) (int_key->data_length + int_key->ref_length));
|
||||
#endif
|
||||
DBUG_RETURN(int_key->data_length + int_key->ref_length);
|
||||
}
|
||||
|
||||
|
@ -723,6 +723,8 @@ static int w_search(register MARIA_HA *info, uint32 comp_flag, MARIA_KEY *key,
|
||||
{
|
||||
error= _ma_insert(info, key, &page, keypos, keybuff,
|
||||
father_page, father_keypos, insert_last);
|
||||
if (error < 0)
|
||||
goto err;
|
||||
page_mark_changed(info, &page);
|
||||
if (_ma_write_keypage(&page, PAGECACHE_LOCK_LEFT_WRITELOCKED,
|
||||
DFLT_INIT_HITS))
|
||||
|
Loading…
x
Reference in New Issue
Block a user