MySQL查询在OPTIMIZE TABLE之后返回不同的行(来自PHP)

时间:2017-09-27 11:32:57

标签: php mysql mysqli innodb

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

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

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

案例1:我在MySQL控制台上运行它并返回正确的值10000158

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

从控制台一直工作。从PHP中没有显示一些记录。 OPTIMIZE TABLE如何在PHP中解决这个问题?它可能是索引中的损坏并且只影响PHP-Mysqli引擎吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

的接受答案