MySQL5.7
我的表 比较简单 只有 id,a,b 三个字段 (id是自增主键)
一开始 表中只有一个索引 a, 发现如下语句走a索引
explain select a,b from t1 where a=998 and b = 13;
后来新增了个 (a,b)联合索引, 结果发现还是走 a 索引, 不走联合索引
后来删除了 索引a, 只保留 (a,b)联合索引, 发现上面sql 走了联合索引, 并且是覆盖索引
之后又加上 索引a, 发现走的还是 (a,b)联合索引
那为什么一开始一直走索引a呢? 感觉好像缓存了什么似的..... 好奇怪
Mysql 优化器默认基于RBO成本计算,哪个成本快,用哪个,不一定就是最优解。
另外建索引一般只需建a,b 和 b 两对索引,不会建a,b 和 a(这个没必要而且增加维护成本)。