mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
2164db3c8c
* Fixed test results. mysql-test/r/index_merge_ror.result: Typo fix mysql-test/r/rowid_order_bdb.result: new index_merge EXPLAIN output format changes mysql-test/r/rowid_order_innodb.result: new index_merge EXPLAIN output format changes sql/opt_range.cc: Undo of previous fix: If cost(full_scan_on_covering_index) < cost(best_range_scan) < cost(full_table_scan) use full_scan_on_covering_index, not best_range_scan. The fix affects read plan choice for more queries then initially anticipated, so I'm reverting it for now, will get back to this later
186 lines
3.3 KiB
Text
186 lines
3.3 KiB
Text
drop table if exists t1, t2, t3,t4;
|
|
create table t1 (
|
|
pk1 int not NULL,
|
|
key1 int(11),
|
|
key2 int(11),
|
|
PRIMARY KEY (pk1),
|
|
KEY key1 (key1),
|
|
KEY key2 (key2)
|
|
) engine=bdb;
|
|
insert into t1 values (-5, 1, 1),
|
|
(-100, 1, 1),
|
|
(3, 1, 1),
|
|
(0, 1, 1),
|
|
(10, 1, 1);
|
|
explain select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
|
|
id select_type table type possible_keys key key_len ref rows Extra
|
|
1 SIMPLE t1 index_merge key1,key2 key1,key2 5,5 NULL 5 Using sort_union(key1,key2); Using where
|
|
select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
|
|
pk1 key1 key2
|
|
-100 1 1
|
|
-5 1 1
|
|
0 1 1
|
|
3 1 1
|
|
10 1 1
|
|
drop table t1;
|
|
create table t1 (
|
|
pk1 int unsigned not NULL,
|
|
key1 int(11),
|
|
key2 int(11),
|
|
PRIMARY KEY (pk1),
|
|
KEY key1 (key1),
|
|
KEY key2 (key2)
|
|
) engine=bdb;
|
|
insert into t1 values (0, 1, 1),
|
|
(0xFFFFFFFF, 1, 1),
|
|
(0xFFFFFFFE, 1, 1),
|
|
(1, 1, 1),
|
|
(2, 1, 1);
|
|
select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
|
|
pk1 key1 key2
|
|
0 1 1
|
|
1 1 1
|
|
2 1 1
|
|
4294967294 1 1
|
|
4294967295 1 1
|
|
drop table t1;
|
|
create table t1 (
|
|
pk1 char(4) not NULL,
|
|
key1 int(11),
|
|
key2 int(11),
|
|
PRIMARY KEY (pk1),
|
|
KEY key1 (key1),
|
|
KEY key2 (key2)
|
|
) engine=bdb collate latin2_general_ci;
|
|
insert into t1 values ('a1', 1, 1),
|
|
('b2', 1, 1),
|
|
('A3', 1, 1),
|
|
('B4', 1, 1);
|
|
select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
|
|
pk1 key1 key2
|
|
a1 1 1
|
|
A3 1 1
|
|
b2 1 1
|
|
B4 1 1
|
|
drop table t1;
|
|
create table t1 (
|
|
pk1 int not NULL,
|
|
pk2 char(4) not NULL collate latin1_german1_ci,
|
|
pk3 char(4) not NULL collate latin1_bin,
|
|
key1 int(11),
|
|
key2 int(11),
|
|
PRIMARY KEY (pk1,pk2,pk3),
|
|
KEY key1 (key1),
|
|
KEY key2 (key2)
|
|
) engine=bdb;
|
|
insert into t1 values
|
|
(1, 'u', 'u', 1, 1),
|
|
(1, 'u', char(0xEC), 1, 1),
|
|
(1, 'u', 'x', 1, 1);
|
|
insert ignore into t1 select pk1, char(0xEC), pk3, key1, key2 from t1;
|
|
insert ignore into t1 select pk1, 'x', pk3, key1, key2 from t1 where pk2='u';
|
|
insert ignore into t1 select 2, pk2, pk3, key1, key2 from t1;
|
|
select * from t1;
|
|
pk1 pk2 pk3 key1 key2
|
|
1 ì u 1 1
|
|
1 ì x 1 1
|
|
1 ì ì 1 1
|
|
1 u u 1 1
|
|
1 u x 1 1
|
|
1 u ì 1 1
|
|
1 x u 1 1
|
|
1 x x 1 1
|
|
1 x ì 1 1
|
|
2 ì u 1 1
|
|
2 ì x 1 1
|
|
2 ì ì 1 1
|
|
2 u u 1 1
|
|
2 u x 1 1
|
|
2 u ì 1 1
|
|
2 x u 1 1
|
|
2 x x 1 1
|
|
2 x ì 1 1
|
|
select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
|
|
pk1 pk2 pk3 key1 key2
|
|
1 ì u 1 1
|
|
1 ì x 1 1
|
|
1 ì ì 1 1
|
|
1 u u 1 1
|
|
1 u x 1 1
|
|
1 u ì 1 1
|
|
1 x u 1 1
|
|
1 x x 1 1
|
|
1 x ì 1 1
|
|
2 ì u 1 1
|
|
2 ì x 1 1
|
|
2 ì ì 1 1
|
|
2 u u 1 1
|
|
2 u x 1 1
|
|
2 u ì 1 1
|
|
2 x u 1 1
|
|
2 x x 1 1
|
|
2 x ì 1 1
|
|
alter table t1 drop primary key;
|
|
select * from t1;
|
|
pk1 pk2 pk3 key1 key2
|
|
1 ì u 1 1
|
|
1 ì x 1 1
|
|
1 ì ì 1 1
|
|
1 u u 1 1
|
|
1 u x 1 1
|
|
1 u ì 1 1
|
|
1 x u 1 1
|
|
1 x x 1 1
|
|
1 x ì 1 1
|
|
2 ì u 1 1
|
|
2 ì x 1 1
|
|
2 ì ì 1 1
|
|
2 u u 1 1
|
|
2 u x 1 1
|
|
2 u ì 1 1
|
|
2 x u 1 1
|
|
2 x x 1 1
|
|
2 x ì 1 1
|
|
select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
|
|
pk1 pk2 pk3 key1 key2
|
|
1 ì u 1 1
|
|
1 ì x 1 1
|
|
1 ì ì 1 1
|
|
1 u u 1 1
|
|
1 u x 1 1
|
|
1 u ì 1 1
|
|
1 x u 1 1
|
|
1 x x 1 1
|
|
1 x ì 1 1
|
|
2 ì u 1 1
|
|
2 ì x 1 1
|
|
2 ì ì 1 1
|
|
2 u u 1 1
|
|
2 u x 1 1
|
|
2 u ì 1 1
|
|
2 x u 1 1
|
|
2 x x 1 1
|
|
2 x ì 1 1
|
|
drop table t1;
|
|
create table t1 (
|
|
pk1 varchar(8) NOT NULL default '',
|
|
pk2 varchar(4) NOT NULL default '',
|
|
key1 int(11),
|
|
key2 int(11),
|
|
primary key(pk1, pk2),
|
|
KEY key1 (key1),
|
|
KEY key2 (key2)
|
|
) engine=bdb;
|
|
insert into t1 values ('','empt',2,2),
|
|
('a','a--a',2,2),
|
|
('bb','b--b',2,2),
|
|
('ccc','c--c',2,2),
|
|
('dddd','d--d',2,2);
|
|
select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
|
|
pk1 pk2 key1 key2
|
|
empt 2 2
|
|
a a--a 2 2
|
|
bb b--b 2 2
|
|
ccc c--c 2 2
|
|
dddd d--d 2 2
|
|
drop table t1;
|