MySQL 有时会错误地为 count(*) 返回 0

Mal*_*ala 2 mysql count

我维护一个对论坛主题进行分页的论坛。为了确定线程有多少页,我执行查询

SELECT COUNT(*) AS `numrows`
    FROM `forum_posts`
    WHERE `thread_id` = '3004'
    AND `deleted` = 0;
Run Code Online (Sandbox Code Playgroud)

然后得到结果,将其除以每页的帖子数,然后向上取整。上述查询有时会无缘无故地返回 0 结果,这会导致分页损坏。通常,问题会在几分钟内“神奇地”自行修复,因此即使到目前为止诊断它也是一个有趣的旅程。或者更确切地说,它可以持续几个小时,但在我登录尝试查看发生了什么后几分钟,它似乎神奇地自行修复(尽管这可能是我的想象)。

当问题出现时,所有此类查询都会返回 0 numrows,并且当问题突然自行解决时,上述查询将再次开始返回正确的值。

什么可能导致此问题?

Ash*_*reh 5

我们也面临这个问题。它也发生在 mysql 客户端(不是通过代码)。看来是mysql的一个bug。这是由索引合并交集引起的

您可以在每个会话中将其关闭并尝试 SET SESSION Optimizer_switch="index_merge_intersection=off";

或者在 my.cnf 中进行全局设置

[mysqld]optimizer_switch=index_merge_intersection=off

错误报告在此处提交

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