mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
BUG#17379 Wrong reuse of E(#rows(range)) as E(#rows(ref(const))):
Re-work best_access_path() and find_best() to reuse E(#rows(range access)) as E(#rows(ref[_or_null](const) access) only when it is appropriate. [This is the final cumulative patch] mysql-test/r/select.result: BUG#17379: Testcase mysql-test/r/subselect.result: BUG#17379: Updated test results mysql-test/t/select.test: BUG#17379: Testcase sql/opt_range.cc: BUG#17379: Wrong reuse of E(#rows(range)) as E(#rows(ref(const))): Make range optimizer together with TABLE::quick_* also return TABLE::quick_n_ranges sql/sql_select.cc: BUG#17379: Wrong reuse of E(#rows(range)) as E(#rows(ref(const))): Re-work best_access_path() to reuse E(#rows(range access)) as E(#rows(ref[_or_null](const) access) only when it is appropriate. sql/table.h: BUG#17379: Wrong reuse of E(#rows(range)) as E(#rows(ref(const))): Make range optimizer together with TABLE::quick_* also return TABLE::quick_n_ranges
This commit is contained in:
@ -3411,3 +3411,19 @@ SELECT * FROM t1;
|
||||
i
|
||||
255
|
||||
DROP TABLE t1;
|
||||
create table t1 (a int);
|
||||
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
create table t2 (a int, b int, c int, e int, primary key(a,b,c));
|
||||
insert into t2 select A.a, B.a, C.a, C.a from t1 A, t1 B, t1 C;
|
||||
analyze table t2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t2 analyze status OK
|
||||
select 'In next EXPLAIN, B.rows must be exactly 10:' Z;
|
||||
Z
|
||||
In next EXPLAIN, B.rows must be exactly 10:
|
||||
explain select * from t2 A, t2 B where A.a=5 and A.b=5 and A.C<5
|
||||
and B.a=5 and B.b=A.e and (B.b =1 or B.b = 3 or B.b=5);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE A range PRIMARY PRIMARY 12 NULL 3 Using where
|
||||
1 SIMPLE B ref PRIMARY PRIMARY 8 const,test.A.e 10
|
||||
drop table t1, t2;
|
||||
|
@ -1480,7 +1480,7 @@ Note 1003 select `test`.`t1`.`s1` AS `s1`,not(<in_optimizer>(`test`.`t1`.`s1`,<e
|
||||
explain extended select s1, s1 NOT IN (SELECT s1 FROM t2 WHERE s1 < 'a2') from t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
|
||||
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 1 Using index; Using where
|
||||
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index; Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`s1` AS `s1`,not(<in_optimizer>(`test`.`t1`.`s1`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`s1`) in t2 on s1 checking NULL where (`test`.`t2`.`s1` < _latin1'a2'))))) AS `s1 NOT IN (SELECT s1 FROM t2 WHERE s1 < 'a2')` from `test`.`t1`
|
||||
drop table t1,t2;
|
||||
|
@ -2886,3 +2886,16 @@ SELECT * FROM t1;
|
||||
UPDATE t1 SET i = i - 1;
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
# BUG#17379
|
||||
|
||||
create table t1 (a int);
|
||||
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
create table t2 (a int, b int, c int, e int, primary key(a,b,c));
|
||||
insert into t2 select A.a, B.a, C.a, C.a from t1 A, t1 B, t1 C;
|
||||
analyze table t2;
|
||||
select 'In next EXPLAIN, B.rows must be exactly 10:' Z;
|
||||
|
||||
explain select * from t2 A, t2 B where A.a=5 and A.b=5 and A.C<5
|
||||
and B.a=5 and B.b=A.e and (B.b =1 or B.b = 3 or B.b=5);
|
||||
drop table t1, t2;
|
||||
|
Reference in New Issue
Block a user