今天我们在SQL查询中发现了一个奇怪的行为(我们使用MySQL v5.6.36和InnoDB).
拿这个查询:
mysql> SELECT count(*) FROM `inventory` WHERE `user_id` = 12345;
Run Code Online (Sandbox Code Playgroud)
它返回以下结果:
+----------+
| count(*) |
+----------+
| 495 |
+----------+
Run Code Online (Sandbox Code Playgroud)
但是当运行以下查询时:
mysql> SELECT count(*) FROM `inventory` WHERE `user_id` = 12345 AND list_type = 3;
Run Code Online (Sandbox Code Playgroud)
我们得到:
+----------+
| count(*) |
+----------+
| 1263 |
+----------+
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,当查询受到限制时,结果计数会更大,这不应该发生.可能是什么原因造成的?它仅在master数据库中发生,而两个复制数据库都显示正确的结果.我们怀疑索引已损坏.如何防止将来出现此类错误?
除了list_type返回无效(太高)之外的任何其他条件也是重要的.