欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于MySQL数据库中使用like对索引的影响

程序员文章站 2022-06-02 20:12:31
...

  之前只知道在数据库中like对索引的影响是%的位置不同,%在配置值的后面才能执行索引,今天有时间就单独写个表看看到底什么区别;

##创建表 设置主键自增
CREATE TABLE test(id INT(11) NOT NULL AUTO_INCREMENT,name VARCHAR(255),PRIMARY KEY(id) );


## 添加索引
ALTER TABLE test ADD INDEX name_index (name);

## 查看索引
SHOW INDEX FROM test;

## 添加记录
INSERT INTO test VALUES((1,'qq'),(2,'qqf'),(3,'abc'),(4,'aabc');

生成表后进行查看like对索引的影响:

## 第一种不加%
explain select * from test where name like 'q';

关于MySQL数据库中使用like对索引的影响

## 第二种%在后
explain select * from test where name like 'q%';

关于MySQL数据库中使用like对索引的影响

## 第三种%在前
explain select * from test where name like '%q';

关于MySQL数据库中使用like对索引的影响

## 第四中前后都有%
explain select * from test where name like '%q%';

关于MySQL数据库中使用like对索引的影响

比较一下这四种情况,发现都使用了索引,possible_keys表示的是可以使用的索引,key表示查询过程中实际使用的索引

type中有index,和range两种 

index: index类型遍历全表索引树

range:只检索给定范围的行,使用一个索引来选择行

现在表中只有两个字段,主键id是和name都是有索引的字段,下面在加一个不是索引的字段,

ALTER TABLE `test`
ADD COLUMN `status`  int(11) UNSIGNED NULL DEFAULT 1 

现在我们在重新走一遍这四个查询:

## 第一种不加%
explain select * from test where name like 'q';

关于MySQL数据库中使用like对索引的影响

## 第二种%在后
explain select * from test where name like 'q%';

关于MySQL数据库中使用like对索引的影响

## 第三种%在前
explain select * from test where name like '%q';

关于MySQL数据库中使用like对索引的影响

## 第四中前后都有%
explain select * from test where name like '%q%';

关于MySQL数据库中使用like对索引的影响

结果就是%在匹配值后面才能用到索引,和前面的比较就是之前的字段是id,name 而id是主键,是索引的一部分 所以select * 取的两个字段都是索引字段。所以 like 语句都会使用到索引。
后面加了一个非索引字段status,并且取数据列表里也存在status字段,所以%在匹配值前的情况就会受影响。
当然如果不是select * ,而是select id 或者select name 再或者 select id,name 都会使用上索引。

大家有条件的也可以试试,看看这个结果,至少可以加深记忆。