当前位置:首页 > 数据库 > mysql

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

2020-08-29 来源:网络 作者:无名网

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

MySQL无法命中索引的情况

1、条件中有or。

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

使用or语句不命中索引

【注意】要想使用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

相关内容:
『 猜你喜欢 』