MySQL 查询 return OPTIMIZE TABLE 后的不同行(来自 PHP)

MySQL query return different rows after OPTIMIZE TABLE (from PHP)

我在 MySQL v.5.7.17(InnoDB,5.000 行)上有这个示例 table:

+-------+----------+ | code1 | code2 | +-------+----------+ | 4714 | 15895510 | | 1041 | 10000158 | | 2866 | 10000000 | (...)

代码 1 已编入索引。
我用一个简单的查询进行测试:SELECT code2 FROM codes WHERE code1=1041

案例 1: 我 运行 它在 MySQL 控制台上 return 正确的值 10000158.

案例2:我运行它来自PHP (mysqli_query())并且没有行 returned (mysqli_num_rows()=0)。 如果我 运行 相同的查询但使用不同的代码 1 (WHERE code1=2866),我会得到正确的结果:10000000.
我做了很多测试,但从未得到 code1=1041.
的行
最后,我 运行 一个 OPTIMIZE TABLE codes 并且我从 code1=1041 得到了正确的值!我很惊讶!

从控制台一直有效。从 PHP 开始,一些记录未显示。 OPTIMIZE TABLE 如何解决 PHP 中的这个问题?会不会是索引损坏,只影响PHP-Mysqli引擎?

谢谢!

我认为这是预期的(或至少极有可能的)行为。 OPTIMIZE TABLE 对数据库 索引进行碎片整理。如果您的索引已损坏(甚至高度碎片化),此命令将修复它们。我最好的猜测是您的高度分散的索引在搜索该值的过程中超时,并且 OPTIMIZE TABLE 修复了该问题。

读这个:https://dev.mysql.com/doc/refman/5.7/en/optimize-table.html 以及 this question

的公认答案