zoukankan      html  css  js  c++  java
  • mysql 模糊匹配优化(全文索引)

    背景:

          批量插入单词时,存在单词匹配例句,批量插入时,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,全文索引匹配耗时并没有改变。

  • 相关阅读:
    处理ORACLE死锁
    正则表达式 浮点数 整型
    Oracle数据类型number(m,n)
    chm文件打开无法正常显示内容
    安装PHP程序提示“include_path='.;c:php5pear'”错误的解决方法
    mysql数据导入数据报错(数据丢失)
    微信小程序如何与数据库交互?
    Eclipse 常用快捷键
    深入理解BodyTagSupport,包括SKIP_PAGE, EVAL_PAGE等
    JSP自定义标签Taglib实现过程重点总结
  • 原文地址:https://www.cnblogs.com/magic101/p/12628245.html
Copyright © 2011-2022 走看看