mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
make the heap.heap test portable
in HEAP btree indexes, the address of a record in memory is part of the key. So, when inserting many identical keys, the actual btree shape is defined by how and where records in memory are allocated. records_in_range uses floats to estimate the size of the chunk of the btree between min and max records, it depends on the btree shape and, thus, is not portable either. As are optimizer decisions that are based on records_in_range estimations, if the number happens to be close to a tipping point. as a fix, reduce the number of matching rows, so that even with system-specific variations the optimizer would still pick the expected plan. Fixes heap.heap failure (range vs ALL) on ppc64
This commit is contained in:
@ -563,32 +563,32 @@ t1 CREATE TABLE `t1` (
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
270
|
||||
267
|
||||
insert into t1 values(concat('a',char(1)),concat('a',char(1)),concat('a',char(1)));
|
||||
select count(*) from t1 where v='a';
|
||||
count(*)
|
||||
10
|
||||
7
|
||||
select count(*) from t1 where c='a';
|
||||
count(*)
|
||||
10
|
||||
7
|
||||
select count(*) from t1 where t='a';
|
||||
count(*)
|
||||
10
|
||||
7
|
||||
select count(*) from t1 where v='a ';
|
||||
count(*)
|
||||
10
|
||||
7
|
||||
select count(*) from t1 where c='a ';
|
||||
count(*)
|
||||
10
|
||||
7
|
||||
select count(*) from t1 where t='a ';
|
||||
count(*)
|
||||
10
|
||||
7
|
||||
select count(*) from t1 where v between 'a' and 'a ';
|
||||
count(*)
|
||||
10
|
||||
7
|
||||
select count(*) from t1 where v between 'a' and 'a ' and v between 'a ' and 'b\n';
|
||||
count(*)
|
||||
10
|
||||
7
|
||||
explain select count(*) from t1 where v='a ';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref v v 13 const # Using where
|
||||
@ -618,9 +618,6 @@ qq
|
||||
*a *a*a *
|
||||
*a *a*a *
|
||||
*a *a*a *
|
||||
*a *a*a *
|
||||
*a *a*a *
|
||||
*a *a*a *
|
||||
explain select * from t1 where v='a';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref v v 13 const # Using where
|
||||
|
@ -337,6 +337,7 @@ while ($1)
|
||||
}
|
||||
dec $1;
|
||||
}
|
||||
delete from t1 where v like 'a%' and length(v) > 7;
|
||||
commit;
|
||||
--enable_query_log
|
||||
select count(*) from t1;
|
||||
|
Reference in New Issue
Block a user