mysql什么情况下设置了索引但无法使用

今天面试被问及到了mysql索引问题,答得不全面。网上搜了一些资料,在这里总结记录一下。

MySQL无法命中索引的情况

1、条件中有or。

我们可以通过EXPLAIN SELECT * FROM ……语句来看一下查询过程中是否使用到的索引,如下图所示。

【注意】要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引。如果出现OR的一个条件没有索引时,建议使用 union ,拼接多个查询语句。

2、like查询是以%开头,索引不会命中

只有一种情况下,只查询索引列,才会用到索引,但是这种情况下跟是否使用%没有关系的,因为查询索引列的时候本身就用到了索引。如下图所示

3、字符串类型不使用引号

如果列类型是字符串类型,那一定要在条件中将数据用引号包裹起来,否则不使用索引。

4、在索引列上使用函数(+,-,*,/)

这种情况需要使用索引,需建立函数索引。

5、采用not in,not exist

采用not in,not exist不走索引

6、B-tree索引

B-tree索引is null不会走,is not null 会走

7、编码不同

链表时,如果关联字段的编码不同,不会走索引。如一个表是utf8,另一个表是utf8mb4

点击显示
· php ord函数
· 如何查看开机自启动的程序
· EvalError: call to eval() blocked by CSP
· uniapp enable ide service (y/n) [27d [27c
· 网页小图标素材网站_ppt小图标素材_icon图标