今天,使用复合索引存在问题,例如(name, age, DESC
),现在转到查询"select * from table ThisTableName where age>15 and desc='test' "
。在这种情况下,B-Tree索引不符合最左边的匹配原则,可以理解null的索引possible_keys,但是key已经显示了复合索引。为什么会这样,possible_keys代表索引可以使用,如果这个值为null,键值原则上只为null。
答案 0 :(得分:0)
我认为the MySQL documentation的这段代码对此进行了解释:
键可能会命名不存在于索引中的索引 Possible_Keys值。如果没有可能的情况,可能会发生这种情况 索引适合查找行,但所有选定的列 通过查询是其他索引的列。也就是说,命名索引 涵盖了选定的列,因此尽管它不用于确定 要检索哪些行,索引扫描比数据更有效 行扫描。
答案 1 :(得分:0)
在我的情况下,当possible_keys为null但已设置索引时-仅删除索引并使用新名称创建索引有帮助!
std::vector<int> numbers = {32, 32, 32, 12, 12, 11, 11, 11, 9};
和
CHECK TABLE _table_name_ QUICK
没有帮助