Bug #81031 | count(*) on innodb sometimes returns 0 | ||
---|---|---|---|
Submitted: | 11 Apr 2016 13:00 | Modified: | 24 May 2017 13:58 |
Reporter: | Ashraf Amayreh | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Optimizer | Severity: | S1 (Critical) |
Version: | 5.6.28 | OS: | Linux |
Assigned to: | CPU Architecture: | Any | |
Tags: | index merge, index_merge_intersection, wrong results |
[11 Apr 2016 13:00]
Ashraf Amayreh
[12 Apr 2016 9:58]
MySQL Verification Team
Hi Ashraf, Thank you for the report. I'm not able to reproduce with the dummy schema/data set. Could you please provide exact test case to reproduce this issue at our end(table schema and subset of data to trigger the issue preferably mysqldump file ). If you can provide more information, feel free to add it to this bug and change the status back to 'Open'. Thank you for your interest in MySQL. Thanks, Umesh
[30 Dec 2016 6:14]
Olivier N
Hello there I use Mysql 5.6.33 on my portal www.reedb.com and this bug still exists. This problem is very critical! example: select count(*) from <table> where active=1 and obj=10 result 0 select count(<table.update>) from <table> where active=1 and obj=10 result 8805 SET SESSION optimizer_switch="index_merge_intersection=off" select count(*) from <table> where active=1 and obj=10 result 8805 If you want, i can send you a dump of a table for tests. thanks to Ashraf Amayreh - you made my day best regards n.Olivier www.reedb.com - real estate online
[30 Dec 2016 7:27]
MySQL Verification Team
TESTCASE: --------- drop table if exists t; create table t (id int,a int,b int,key (a),key (b) ) engine=innodb partition by hash (id) partitions 4; insert into t values (0,4,1); insert into t values (6,2,5); insert into t values (6,7,5); insert into t values (6,8,2); insert into t values (1,7,2); insert into t values (2,4,6); select sql_no_cache * from t; set session optimizer_switch="index_merge_intersection=off"; select sql_no_cache count(*) from t where a=4 and b=6; set session optimizer_switch="index_merge_intersection=on"; select sql_no_cache count(*) from t where a=4 and b=6;
[30 Dec 2016 7:42]
MySQL Verification Team
Verified on 5.6.35. 5.5.52, 5.7.17, 8.0.1 are not affected.
[14 Apr 2017 14:33]
Brendan Howard
Also verified this bug exists in MySQL 5.6.34 via AWS RDS and is not consistent, sometimes appropriate number of results are returned, but after 2-3 weeks of uptime DB starts to return zero results for a majority of count(*) queries. index_merge_intersection=off Fixes the issue.
[24 May 2017 13:58]
Daniel Price
Posted by developer: Fixed as of the upcoming 5.6.37, 5.7.19, 8.0.2 release, and here's the changelog entry: When using an index merge optimizer switch, a SELECT COUNT(*) operation sometimes returned 0. Partitioning code incorrectly performed a memcpy instead of a column copy of columns read by the index, causing the wrong records to be copied.
[8 Nov 2017 21:21]
Steven Pine
This issue still occurs for me, I am using the Percona release, so maybe I should open it with them, but according to them they are using your latest branch. https://www.percona.com/doc/percona-server/5.6/release-notes/Percona-Server-5.6.37-82.2.ht... When i run the select count with index () it returns the correct amount. I have also temporarily set index_merge_intersection off which has resolved the error.
[14 Nov 2017 15:46]
Øystein Grøvlen
Hi Steven, Since bug report is closed, please, open a new bug report with a reproducible test case for us to look at.
[7 Feb 2018 21:25]
Dmitry V
Mysql 5.6.39 Innodb table has the same issue on my system.
[21 Mar 2019 16:32]
Simon Banaan
The database
Attachment: tmp_projectdays.sql (application/octet-stream, text), 313.56 KiB.
[9 Jun 2021 22:22]
Rick James
"Index merge intersect" is usually a clue that you have multiple single-row indexes. Almost always, you could add a multi-column ("composite") index to make it run faster _and_ avoid the bug with "intersect".