跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 大数据量模糊匹配有快速响应的优化方案吗?
未分類
12 4 月 2021

大数据量模糊匹配有快速响应的优化方案吗?

大数据量模糊匹配有快速响应的优化方案吗?

資深大佬 : chinafengzhao 0

背景

MySQL,单表数据量超过 2000 万,需求是要求快速模糊查询。

select * from xxx where aaa like ‘%yyyyy’ ;

有快速优化方案吗?

大佬有話說 (31)

  • 資深大佬 : johnsona

    加一列把原来的列 reverse 一下 这样就能用到索引了( bushi

  • 資深大佬 : lscexpress

    使用 fulltext

  • 資深大佬 : Justin13

    对实时性要求不高可以加缓存,把查询结果存储起来。
    要求实时但是查询是固定的话,可以加一索引列,存储查询的结果,写入时一并添加。
    如果什么都不能做,只能改查询,那就洗洗睡吧。

  • 資深大佬 : simon1991

    上 elasticsearch ()

  • 資深大佬 : MinQ

    上 ES 或者 Solr 吧

  • 資深大佬 : MinQ

    而且像 xxxx%的前缀查询才能用索引,%yyyyy 建议直接放弃治疗

  • 資深大佬 : 3dwelcome

    @johnsona “加一列把原来的列 reverse 一下 这样就能用到索引了( bushi”

    我觉得 reverse 这种,新数据库已经自己优化掉了。要不然 2000 万条数据无索引暴力查询,不知道慢到什么程度了。

  • 主 資深大佬 : chinafengzhao

    不好意思,查询逻辑要求的是 like %企业名关键词%

  • 資深大佬 : MinQ

    @3dwelcome mysql 是没有优化的,需要自己新增,比如取前 N 个 reverse 然后存下来

  • 資深大佬 : MinQ

    @chinafengzhao 还是 fulltext 或者 ES 吧

  • 主 資深大佬 : chinafengzhao

    我试试 fulltext

  • 資深大佬 : 3dwelcome

    @MinQ “mysql 是没有优化的,需要自己新增,比如取前 N 个 reverse 然后存下来”
    新版本已经加上了,有新的创建 index 语法, DESC 关键词, 不用手动 reverse 。

  • 資深大佬 : leviathan0992

    全文索引

  • 資深大佬 : Drinker

    es 可以或者分表。

  • 資深大佬 : securityCoding

    2000 万表这个数量级应该禁止用 like 了 , 推荐用其他的中间件来解决这个问题,比如 es

  • 資深大佬 : MinQ

    @3dwelcome
    你说的是这个吗?

    https://dev.mysql.com/doc/refman/8.0/en/create-index.html

    A key_part specification can end with ASC or DESC to specify whether index values are stored in ascending or descending order. The default is ascending if no order specifier is given. ASC and DESC are not permitted for HASH indexes. ASC and DESC are also not supported for multi-valued indexes. As of MySQL 8.0.12, ASC and DESC are not permitted for SPATIAL indexes.

    好像这个只是吧索引的顺序按从小到大或者从大到小排吧?而不是把某一列的字符 reverse 以后生成索引?

  • 資深大佬 : fiypig

    %% 基本上索引就失效了

  • 資深大佬 : 3dwelcome

    @MinQ 记错了,那就是 CREATE INDEX idx1 ON table1 REVERSE(col1);

    REVERSE 是对针对字符串处理的。

  • 資深大佬 : MinQ

    @3dwelcome create index 的时候不能使用 reverse 吧

  • 資深大佬 : wakzz

    这种模糊查询,mysql 还是放弃吧,用 es

  • 資深大佬 : catchexception

    倒排索引。

  • 資深大佬 : 3dwelcome

    @MinQ 我刚试了一下,没发现有什么问题。

    ALTER TABLE table1 ADD INDEX REVERSE(col);

  • 資深大佬 : zhangysh1995

    @johnsona 一这个虽然有点魔幻,但是挺靠谱的。。。贴主要不考虑下?@chinafengzhao

  • 資深大佬 : zzl22100048

    上 ES,我们 2 亿企业数据,就靠 ES 撑着

  • 資深大佬 : ilylx2008

    数据变化不大的话,遍历 2000w 条记录,与公司的对应关系,生成一个关系表。
    新增数据同样处理。

  • 資深大佬 : L1shen

    嫌 es 重的话,还可以用 sonic
    https://github.com/valeriansaliou/sonic

  • 資深大佬 : mlcq

    2000 万还不分表吗,还有你的索引要建好,尽量不要回表。你那种写法是不走索引的

  • 資深大佬 : zhaokun

    不增加服务比如 ES,可以考虑自己做倒排索引,当然要依赖分词服务

  • 資深大佬 : long2ice

    试试 MySQL 全文索引,最简单的方案,增加中间件也会增加系统复杂度,需要仔细评估

  • 資深大佬 : johnsona

    @zhangysh1995 主要 es 依赖分词 效果和模糊搜索不一样 分词没分出来 那就搜不到 github 的 issue 模块搜索功能就这样

  • 資深大佬 : vindurriel

    ES Solr Lucene 解决不了 like %foo% 中文默认单字分词的时候可以按字搜出来 但这不是 like %foo% 而是 in (f, o, o)

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具