繁体   English   中英

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

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

我在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 )。 如果我运行相同的查询,但使用不同的code1( WHERE code1=2866 ), 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/zh-CN/optimize-table.html以及该问题的公认答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM