From 20bb4ed15e6d4fa93575e6646b9c7c781346b7a8 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Sun, 16 Jun 2019 14:53:17 +0200 Subject: [PATCH] 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 --- mysql-test/suite/heap/heap.result | 21 +++++++++------------ mysql-test/suite/heap/heap.test | 1 + 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/mysql-test/suite/heap/heap.result b/mysql-test/suite/heap/heap.result index 326142a71a4..e8d1341aa9b 100644 --- a/mysql-test/suite/heap/heap.result +++ b/mysql-test/suite/heap/heap.result @@ -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 diff --git a/mysql-test/suite/heap/heap.test b/mysql-test/suite/heap/heap.test index ea07d020e4d..237685a6423 100644 --- a/mysql-test/suite/heap/heap.test +++ b/mysql-test/suite/heap/heap.test @@ -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;