数据库索引问题求助

新手上路,请多包涵

大佬们,请教一个问题:
如果数据库存在索引(a, b, c), (d, b, c),
此时有查询条件 a = 1 and b = 2 and d=3
这时数据库会怎么走索引啊?两个中选一个吗?

阅读 1.8k
3 个回答

自己搞个数据库看一下执行计划就知道了。


单纯分析的话,根据最左匹配原则会走 (a, b, c)索引的,但是只会用到a, b两个字段。因为d不在索引内,需要进行回表选出所有符合条件a, b的数据,然后对d进行过滤。

EXPLAIN一下。


最终只会用一个索引,联合索引,根据最左匹配原则,命中第一个联合索引。你也可以强制使用第二个索引。

可能会走index(a,b)index(d,b)MySQL会根据统计表预估走索引行数和资源消耗,选择优化器认为的最优方案

推荐问题