mirror of
https://github.com/MariaDB/server.git
synced 2025-08-09 22:24:09 +03:00
Fix test_if_skip_sort_order() logic: WHEN we use index X, which doesn't produce needed ordering, but there is an index Y which does and has the same prefix as used prefix of X THEN don't just switch to using ref access on Y. If range(Y) would use more key parts, use range(Y).
44 lines
1.1 KiB
Plaintext
44 lines
1.1 KiB
Plaintext
--source include/have_innodb.inc
|
|
|
|
--disable_warnings
|
|
drop table if exists t0,t1,t2,t3;
|
|
--enable_warnings
|
|
|
|
--echo #
|
|
--echo # MDEV-6402: Optimizer doesn't choose best execution plan when composite key is used
|
|
--echo #
|
|
create table t0(a int);
|
|
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
|
|
|
create table t1(a int);
|
|
insert into t1 select A.a + B.a* 10 + C.a * 100 from t0 A, t0 B, t0 C;
|
|
|
|
CREATE TABLE t2 (
|
|
pk1 int(11) NOT NULL,
|
|
pk2 int(11) NOT NULL,
|
|
fd5 bigint(20) DEFAULT NULL,
|
|
filler1 char(200),
|
|
filler2 char(200),
|
|
PRIMARY KEY (pk1,pk2),
|
|
UNIQUE KEY ux_pk1_fd5 (pk1,fd5)
|
|
) ENGINE=InnoDB;
|
|
|
|
insert into t2
|
|
select
|
|
round(log(2,t1.a+1)),
|
|
t1.a,
|
|
t1.a,
|
|
REPEAT('filler-data-', 10),
|
|
REPEAT('filler-data-', 10)
|
|
from
|
|
t1;
|
|
|
|
select pk1, count(*) from t2 group by pk1;
|
|
|
|
--echo # The following should use range(ux_pk1_fd5), two key parts (key_len=5+8=13)
|
|
EXPLAIN SELECT * FROM t2 USE INDEX(ux_pk1_fd5) WHERE pk1=9 AND fd5 < 500 ORDER BY fd5 DESC LIMIT 10;
|
|
--echo # This also must use range, not ref. key_len must be 13
|
|
EXPLAIN SELECT * FROM t2 WHERE pk1=9 AND fd5 < 500 ORDER BY fd5 DESC LIMIT 10;
|
|
|
|
drop table t0,t1, t2;
|