mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge
This commit is contained in:
@ -6087,4 +6087,39 @@ pk a pk a
|
|||||||
50 ee 14 ee
|
50 ee 14 ee
|
||||||
SET SESSION join_cache_level = DEFAULT;
|
SET SESSION join_cache_level = DEFAULT;
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
#
|
||||||
|
# Bug #694092: incorrect detection of index only pushdown conditions
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
f1 varchar(10), f3 int(11), PRIMARY KEY (f3)
|
||||||
|
);
|
||||||
|
INSERT INTO t1 VALUES ('y',1),('or',5);
|
||||||
|
CREATE TABLE t2 (
|
||||||
|
f3 int(11), f2 varchar(1024), f4 varchar(10), PRIMARY KEY (f3)
|
||||||
|
);
|
||||||
|
INSERT INTO t2 VALUES (6,'RPOYT','y'),(10,'JINQE','m');
|
||||||
|
SET SESSION join_cache_level = 1;
|
||||||
|
SET SESSION optimizer_switch = 'index_condition_pushdown=off';
|
||||||
|
EXPLAIN
|
||||||
|
SELECT * FROM t1,t2
|
||||||
|
WHERE t1.f1 = t2.f4 AND (t1.f3 = 1 AND t2.f3 = 4 OR t1.f3 = 2 AND t2.f3 = 6);
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 2 Using where; Using MRR
|
||||||
|
1 SIMPLE t2 range PRIMARY PRIMARY 4 NULL 2 Using where; Using MRR; Using join buffer (flat, BNL join)
|
||||||
|
SELECT * FROM t1,t2
|
||||||
|
WHERE t1.f1 = t2.f4 AND (t1.f3 = 1 AND t2.f3 = 4 OR t1.f3 = 2 AND t2.f3 = 6);
|
||||||
|
f1 f3 f3 f2 f4
|
||||||
|
SET SESSION optimizer_switch = 'index_condition_pushdown=on';
|
||||||
|
EXPLAIN
|
||||||
|
SELECT * FROM t1,t2
|
||||||
|
WHERE t1.f1 = t2.f4 AND (t1.f3 = 1 AND t2.f3 = 4 OR t1.f3 = 2 AND t2.f3 = 6);
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 2 Using index condition; Using MRR
|
||||||
|
1 SIMPLE t2 range PRIMARY PRIMARY 4 NULL 2 Using index condition; Using where; Using MRR; Using join buffer (flat, BNL join)
|
||||||
|
SELECT * FROM t1,t2
|
||||||
|
WHERE t1.f1 = t2.f4 AND (t1.f3 = 1 AND t2.f3 = 4 OR t1.f3 = 2 AND t2.f3 = 6);
|
||||||
|
f1 f3 f3 f2 f4
|
||||||
|
SET SESSION join_cache_level = DEFAULT;
|
||||||
|
SET SESSION optimizer_switch = DEFAULT;
|
||||||
|
DROP TABLE t1,t2;
|
||||||
set @@optimizer_switch=@save_optimizer_switch;
|
set @@optimizer_switch=@save_optimizer_switch;
|
||||||
|
@ -2704,6 +2704,7 @@ DROP TABLE t1,t2,t3,t4,t5;
|
|||||||
--echo # Bug #670380: hash join for non-binary collation
|
--echo # Bug #670380: hash join for non-binary collation
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE t1 (pk int PRIMARY KEY, a varchar(32));
|
CREATE TABLE t1 (pk int PRIMARY KEY, a varchar(32));
|
||||||
CREATE TABLE t2 (pk int PRIMARY KEY, a varchar(32), INDEX idx(a));
|
CREATE TABLE t2 (pk int PRIMARY KEY, a varchar(32), INDEX idx(a));
|
||||||
INSERT INTO t1 VALUES
|
INSERT INTO t1 VALUES
|
||||||
@ -2722,6 +2723,41 @@ SELECT * FROM t1,t2 WHERE t1.a=t2.a;
|
|||||||
SET SESSION join_cache_level = DEFAULT;
|
SET SESSION join_cache_level = DEFAULT;
|
||||||
|
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug #694092: incorrect detection of index only pushdown conditions
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
f1 varchar(10), f3 int(11), PRIMARY KEY (f3)
|
||||||
|
);
|
||||||
|
INSERT INTO t1 VALUES ('y',1),('or',5);
|
||||||
|
|
||||||
|
CREATE TABLE t2 (
|
||||||
|
f3 int(11), f2 varchar(1024), f4 varchar(10), PRIMARY KEY (f3)
|
||||||
|
);
|
||||||
|
INSERT INTO t2 VALUES (6,'RPOYT','y'),(10,'JINQE','m');
|
||||||
|
|
||||||
|
SET SESSION join_cache_level = 1;
|
||||||
|
|
||||||
|
SET SESSION optimizer_switch = 'index_condition_pushdown=off';
|
||||||
|
EXPLAIN
|
||||||
|
SELECT * FROM t1,t2
|
||||||
|
WHERE t1.f1 = t2.f4 AND (t1.f3 = 1 AND t2.f3 = 4 OR t1.f3 = 2 AND t2.f3 = 6);
|
||||||
|
SELECT * FROM t1,t2
|
||||||
|
WHERE t1.f1 = t2.f4 AND (t1.f3 = 1 AND t2.f3 = 4 OR t1.f3 = 2 AND t2.f3 = 6);
|
||||||
|
|
||||||
|
SET SESSION optimizer_switch = 'index_condition_pushdown=on';
|
||||||
|
EXPLAIN
|
||||||
|
SELECT * FROM t1,t2
|
||||||
|
WHERE t1.f1 = t2.f4 AND (t1.f3 = 1 AND t2.f3 = 4 OR t1.f3 = 2 AND t2.f3 = 6);
|
||||||
|
SELECT * FROM t1,t2
|
||||||
|
WHERE t1.f1 = t2.f4 AND (t1.f3 = 1 AND t2.f3 = 4 OR t1.f3 = 2 AND t2.f3 = 6);
|
||||||
|
|
||||||
|
SET SESSION join_cache_level = DEFAULT;
|
||||||
|
SET SESSION optimizer_switch = DEFAULT;
|
||||||
|
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
# this must be the last command in the file
|
# this must be the last command in the file
|
||||||
set @@optimizer_switch=@save_optimizer_switch;
|
set @@optimizer_switch=@save_optimizer_switch;
|
||||||
|
@ -155,7 +155,11 @@ Item *make_cond_for_index(Item *cond, TABLE *table, uint keyno,
|
|||||||
new_cond->argument_list()->push_back(fix);
|
new_cond->argument_list()->push_back(fix);
|
||||||
used_tables|= fix->used_tables();
|
used_tables|= fix->used_tables();
|
||||||
}
|
}
|
||||||
n_marked += test(item->marker == ICP_COND_USES_INDEX_ONLY);
|
if (test(item->marker == ICP_COND_USES_INDEX_ONLY))
|
||||||
|
{
|
||||||
|
n_marked++;
|
||||||
|
item->marker= 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (n_marked ==((Item_cond*)cond)->argument_list()->elements)
|
if (n_marked ==((Item_cond*)cond)->argument_list()->elements)
|
||||||
cond->marker= ICP_COND_USES_INDEX_ONLY;
|
cond->marker= ICP_COND_USES_INDEX_ONLY;
|
||||||
@ -184,7 +188,11 @@ Item *make_cond_for_index(Item *cond, TABLE *table, uint keyno,
|
|||||||
if (!fix)
|
if (!fix)
|
||||||
return (COND*) 0;
|
return (COND*) 0;
|
||||||
new_cond->argument_list()->push_back(fix);
|
new_cond->argument_list()->push_back(fix);
|
||||||
n_marked += test(item->marker == ICP_COND_USES_INDEX_ONLY);
|
if (test(item->marker == ICP_COND_USES_INDEX_ONLY))
|
||||||
|
{
|
||||||
|
n_marked++;
|
||||||
|
item->marker= 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (n_marked ==((Item_cond*)cond)->argument_list()->elements)
|
if (n_marked ==((Item_cond*)cond)->argument_list()->elements)
|
||||||
cond->marker= ICP_COND_USES_INDEX_ONLY;
|
cond->marker= ICP_COND_USES_INDEX_ONLY;
|
||||||
|
Reference in New Issue
Block a user