MySQL使用like进行模糊查询

1,674 阅读2分钟

在项目开发中,我们会需要实现搜索的功能,那么我们就要通过sql语句中的like操作符来实现模糊查询了。

通配符分类

  • % 百分号通配符:匹配0个或任意多个字符
  • _ 下划线通配符:只能匹配1个字符

like操作符

通过like操作符与通配符的组合,我们可以实现模糊查询的功能。当我们使用like操作符进行模糊查询的时候,它的查询效率是会比正常查询慢的。这也是可以理解的,模糊查询需要执行额外的算法。

这里提醒一下:如果我们如果没有使用通配符的话,like操作符的作用其实就和 = 一样。如下:

select * from essay where title like 'change';

上面这条sql语句,我们没有使用任何通配符,所以它的作用实际就等同于下面的语句:

select * from essay where title = 'change';

% 百分号通配符的使用

查询title以chan开头的记录

select * from essay where title = 'chan%';

查询title包含有chan的记录

select * from essay where title = '%chan%';

查询title包含以chan结尾的记录

select * from essay where title = "%chan";

_ 下划线通配符的使用

匹配title类似change的记录

select * from essay where title = `chan__`;

注意事项

  • MySQL可能是区分大小写,也可以不区分大小写,这个取决于MySQL的具体配置。如果区分大小写的话,那么select * from essay where title = "%chan"这条语句是匹配不到asChan这样的字符串。
  • % 百分号通配符可以匹配任意字符,但是它是匹配不到NULL的。也就是说它是匹配不到title数据列值为NULL的记录。
  • 使用like 'chan_'like 'chan%',模糊搜索也是会用到索引的,但还是会比普通查询要慢。但是like '%chan%'这样,它没有用到索引,每次查询都需要进行一次全表查询,可想而知,它的效率是非常低的。
  • 使用like操作符进行模糊查询的时候,在小数据场景还是可以的。但在大数据情况下,它的查询效率是很低的。因此,在大数据情况下,推荐使用搜索引擎,如Solr