我在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
答案 0 :(得分:4)
问题似乎是mysql的一个错误。它是由索引合并交集引起的。
您可以为每个会话设置它 SET SESSION optimizer_switch =“index_merge_intersection = off”;
或者在my.cnf中全局设置
的[mysqld] optimizer_switch = index_merge_intersection =关
此处提交的错误报告
答案 1 :(得分:0)
您可以通过添加'复合'来避免错误并加快查询速度。指数:
INDEX(publisher_id, deleted, status_id)
(列可以按任何顺序排列。)
如果涉及PARTITION BY HASH
,则可能涉及bug 70588。它在5.5.36,5.6.16,5.7.4中确定。