现在,使用复合索引(如(name, age, DESC) )存在问题,现在转到查询"select * from table ThisTableName where age>15 and desc='test' "。在这种情况下,B树索引不符合最左边的匹配原则,可以理解为null的索引possible_keys,但是键显示了复合索引。为什么会出现这种情况,possible_keys代表的索引可以使用,如果这个值是null,原则上只对null键值。
发布于 2019-01-09 23:20:32
我认为来自MySQL文档的这个片段解释了这一点:
键可能会命名不存在于possible_keys值中的索引。如果所有possible_keys索引都不适合查找行,但查询所选的所有列都是其他索引的列,则可能发生这种情况。也就是说,命名索引涵盖选定的列,因此虽然它不用于确定要检索的行,但索引扫描比数据行扫描更有效。
发布于 2020-01-30 11:45:13
在我的例子中,当possible_keys为null但索引已经设置时-只删除索引并使用新名称帮助创建索引!
CHECK TABLE _table_name_ QUICK和REPAIR TABLE _table_name_ QUICK帮不上忙
https://stackoverflow.com/questions/42755956
复制相似问题