您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

mysql 模糊匹配优化(全文索引)

bubuko 2022/1/25 20:00:31 mysql 字数 3359 阅读 636 来源 http://www.bubuko.com/infolist-5-1.html

背景: 批量插入单词时,存在单词匹配例句,批量插入时,like匹配 批量插入时几十个单词挨个模糊匹配,接口超时,因为是后台管理系统,不打算接入ES,并且允许接口一定程度的慢,但接口超时得解决 方案: 1、正则表达式匹配,同样慢得令人发指 2、添加全文索引 只有Innodb和myisam存储引擎能用全 ...

背景:

      批量插入单词时,存在单词匹配例句,批量插入时,like匹配 批量插入时几十个单词挨个模糊匹配,接口超时,因为是后台管理系统,不打算接入ES,并且允许接口一定程度的慢,但接口超时得解决

方案:

      1、正则表达式匹配,同样慢得令人发指

      2、添加全文索引

  只有Innodb和myisam存储引擎能用全文索引(innodb支持全文索引是从mysql5.6开始的)

  CREATE FULLTEXT INDEX   index   ON  table(`content`);

查看执行计划,确认走了索引

技术分享图片

三种类型的全文搜索方式

natural language search(自然语言搜索)

通过MATCH AGAINST 传递某个特定的字符串来进行检,默认方式

boolean search(布尔搜索)

为检索的字符串增加操作符,如“+”表示必须包含,"-"不包含,"*" 表示通配符,即使传递的字符串较小或出现在停词中,也不会被过滤掉

query expansion search(查询扩展搜索)

搜索字符串用于执行自然语言搜索,然后,搜索返回的最相关行的单词被添加到搜索字符串,并且再次进行搜索,查询将返回来自第二个搜索的行

 

但是具体到执行时间,并没有太大得差别,难道问题不是出在这个like匹配上?

SELECT
        sentence 
           FROM
           table a
           WHERE
          sentence LIKE      CONCAT(%,one, % )
           LIMIT 0,5;

--  0.0109 s

SELECT
           sentence
           FROM
           table a
           WHERE
     match(sentence) against(one)
           LIMIT 0,5;
-- 0.0049 s

后来恍然大悟,因为limit 得原因 关键字太简单,查询5条,很快就能匹配上,满足5条直接返回。

经过测试,生僻一点的单词,like 大约需要消耗2s,全文索引匹配耗时并没有改变。

 

mysql 模糊匹配优化(全文索引)

原文:https://www.cnblogs.com/magic101/p/12628245.html


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶