MySQL中不会命中索引的情况

MySQL中不会命中索引的情况,第1张

我们简单建了一张表,如下:

我们建立了两个索引,分别为主键索引id和普通索引product_id

如果我们的where条件中存在or,及时其中带索引,也不会命中索引。这也是为什么尽量使用or的原因

我们通过主键索引查询,可以看见命中了索引:

而我们在where 条件后面加上or之后,就不会命中索引了:

可以看到如果用like查询的话,%在右边会命中索引的,而%在左边则不会。当然这也不是绝对的,当我们使用索引列进行查询的时候,就都会命中索引了:

NOT IN,NOT LIKE,NOT EXTSTS都不会命中索引

MySQL的复合索引可以创建多个,每个复合索引可以包含一列或多列。复合索引使用的基本原则是左侧对齐原则。例如,复合索引包含A,B,C字段,实际相当于创建了5个索引,即:

那么问题来了,如果我们创建两个复合索引,复合索引1:包含A,B,C列和复合索引2:包含B,C列,MySQL如何执行呢?

按照正常的逻辑,和复合索引的原则,应该能命中的索引是A_B_C_index,让我们拭目以待吧!

结果:和上次测试的不一致,这次虽然包含ABC三个列,但命中的索引是B_C_index

重要结论:当命中两个或者多个不同的复合索引时,按照创建顺序不同,MySQL会有不同策略来选取其中的一个复合索引。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8678391.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存