由于某些原因,带有AND子句的SELECT查询显示出一些奇怪的行为。当我知道有匹配时,它返回零行。如果我删除其中的任何一个条款,它是有效的。或者,最奇怪的是,如果我将通配符添加到字符串的末尾以进行匹配,它将返回预期的结果。即使在列数据的末尾没有任何额外的字节。
示威:
SELECT HEX(type),
type,
category
FROM cats
WHERE `category` = 10 AND
`type` LIKE "Furry";
Empty set (0.07 sec)但
SELECT HEX(type),type,category FROM cats WHERE `type` LIKE "Furry";
+----------------------------------+------------------------+----------+
| HEX(type) | type | category |
+----------------------------------+------------------------+----------+
| 4675727279 | Furry | 10 |
...和
SELECT HEX(type),type,category FROM cats WHERE `category`=10 AND `type` LIKE "Furry%";
+----------------------------------+------------------------+----------+
| HEX(type) | type | category |
+----------------------------------+------------------------+----------+
| 4675727279 | Furry | 10 |
...我在这里错过了什么?
发布于 2016-11-11 21:28:54
根据执行计划和数据分布,MySQL将决定扫描表或索引之一以获得所需的数据。
如果要从索引中读取数据,并且索引已损坏,则有可能不返回任何数据或错误数据。
优化表将重新构建表及其索引。因此,如果索引已损坏,则在优化后将对其进行修复。
HTH
https://dba.stackexchange.com/questions/154631
复制相似问题