1、常见用法:
(1)搭配%使用
%代表一个或多个字符的通配符,譬如查询字段name中以大开头的数据:
![](/d/20211017/0b5e07c0edac8f027717b3f217301508.gif)
(2)搭配_使用
_代表仅仅一个字符的通配符,把上面那条查询语句中的%改为_,会发现只能查询出下面一条数据:
![](/d/20211017/9032a5af7c41e7a608a699e73e42c48e.gif)
2、使用like模糊查询会导致索引失效,在数据量大的时候会有性能问题
(1)尽量少以%或者_开头进行模糊查询
通过explain执行计划,我们发现,使用like模糊查询时,如果不以%和_开头查询的话,索引还是有效的
![](/d/20211017/f20094c51d20bdf19009f8ba77af1213.gif)
![](/d/20211017/0eca45bdb59b2fdd5de05aa8d7f1923b.gif)
以%或者_开头查询,索引失效
![](/d/20211017/322e47fc4ddaebf33522677b2d5417a9.gif)
![](/d/20211017/c1f253f387d66a0603d3e253594eaec9.gif)
(2)使用覆盖索引
当查询的的条件和查询的结果都是索引中的字段的时候,这个索引我们可以称之为覆盖索引,这个时候,使用like模糊查询索引是有效的
![](/d/20211017/91817f3a73dd74bc6f47c2b269f313dd.gif)
![](/d/20211017/e158c8266157aa4f2d16c426226d20a0.gif)
InnoDB中主键可以不添加进索引中
注意:使用覆盖索引,对于字段的长度是由要求限制的,一般超过长度,索引也会失效
这里如果我查询中带有descripition字段,则覆盖索引也会失效(我这里的数据库经过测试最多只支持255长度的字段)
![](/d/20211017/f3fcac1e552f7988d25f5b8847903937.gif)
![](/d/20211017/4c4b2015da9061838bbdc0061e923e32.gif)
![](/d/20211017/7f4b737671d0474aee29c386271e4712.gif)
(3)使用全文索引
给字段建立Full Text索引,然后使用match(...) against(...)进行检索
![](/d/20211017/3223222589a27bc7e9bf3068124b804c.gif)
![](/d/20211017/ba57ec6d3693effdfb633df7ce3f2092.gif)
注意:这种全文索引方式只对英文单词起作用,对于中文汉字支持不够友好,需要额外去mysql的配置文件做一些配置修改,让它额外支持中文
(4)使用一些额外的全文搜索引擎来解决
Lucene,solr,elasticsearch等等
基本原理是:把mysql配置文件中的ft_min_word_len=3改为1。(没有这项就直接添加),然后新建一个字段来保持分词结果,给这个字段建立全文索引。然后实现一个分词模块,把词语“大家好”拆分为“大 大家 大家好 家 家好 好”。然后用match .. against 来代替like %%,查询出来的结果跟like的结果基本相同(如果分词合理的话),但是效率比like高至少10倍以上。
总结
到此这篇关于mysql对于模糊查询like的文章就介绍到这了,更多相关mysql模糊查询like内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:- MySQL 数据库 like 语句通配符模糊查询小结
- MySQL Like模糊查询速度太慢如何解决
- Mysql| 使用通配符进行模糊查询详解(like,%,_)
- mysql模糊查询like与REGEXP的使用详细介绍
- mysql模糊查询like和regexp小结
- MySql like模糊查询通配符使用详细介绍
- mysql中like % %模糊查询的实现