我的innodb表为count(*)返回0

时间:2016-04-11 12:41:54

标签: mysql count innodb

我在mysql命令行(不是通过任何类型的代码)进行此查询

select count(*) from books where
publisher_id = 46 AND deleted = 0 AND status_id = 3;

返回0(有时),但删除计数,它有很多结果。

可能导致这种情况的原因是什么?我在命令行(而不是通过任何类型的编程层)抛出此查询

解释计数查询给出:

Using intersect(IDX_cms_books_publisher_id,IDX_cms_books_status_id,IDX_cms_books_deleted); Using where; Using index

2 个答案:

答案 0 :(得分:4)

问题似乎是mysql的一个错误。它是由索引合并交集引起的。

您可以为每个会话设置它 SET SESSION optimizer_switch =“index_merge_intersection = off”;

或者在my.cnf中全局设置

的[mysqld] optimizer_switch = index_merge_intersection =关

此处提交的错误报告

http://bugs.mysql.com/bug.php?id=81031

答案 1 :(得分:0)

您可以通过添加'复合'来避免错误并加快查询速度。指数:

INDEX(publisher_id, deleted, status_id)

(列可以按任何顺序排列。)

如果涉及PARTITION BY HASH,则可能涉及bug 70588。它在5.5.36,5.6.16,5.7.4中确定。