数据库索引问题求助

新手上路,请多包涵

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

阅读 1.7k
3 个回答

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


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

EXPLAIN一下。


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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题