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

2021-04-14 10:04:49 +08:00
 chinafengzhao

背景

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

select * from xxx where aaa like '%yyyyy' ;

有快速优化方案吗?

2324 次点击
所在节点    数据库
31 条回复
catchexception
2021-04-14 11:28:26 +08:00
倒排索引。
3dwelcome
2021-04-14 11:37:57 +08:00
@MinQ 我刚试了一下,没发现有什么问题。

ALTER TABLE table1 ADD INDEX REVERSE(col);
zhangysh1995
2021-04-14 12:41:32 +08:00
@johnsona 一楼这个虽然有点魔幻,但是挺靠谱的。。。贴主要不考虑下?@chinafengzhao
zzl22100048
2021-04-14 12:48:12 +08:00
上 ES,我们 2 亿企业数据,就靠 ES 撑着
ilylx2008
2021-04-14 13:06:42 +08:00
数据变化不大的话,遍历 2000w 条记录,与公司的对应关系,生成一个关系表。
新增数据同样处理。
L1shen
2021-04-14 15:43:54 +08:00
嫌 es 重的话,还可以用 sonic
https://github.com/valeriansaliou/sonic
mlcq
2021-04-14 16:26:37 +08:00
2000 万还不分表吗,还有你的索引要建好,尽量不要回表。你那种写法是不走索引的
zhaokun
2021-04-14 16:31:56 +08:00
不增加服务比如 ES,可以考虑自己做倒排索引,当然要依赖分词服务
jenlors
2021-04-14 17:49:59 +08:00
试试 MySQL 全文索引,最简单的方案,增加中间件也会增加系统复杂度,需要仔细评估
johnsona
2021-04-14 23:04:47 +08:00
@zhangysh1995 主要 es 依赖分词 效果和模糊搜索不一样 分词没分出来 那就搜不到 github 的 issue 模块搜索功能就这样
vindurriel
2021-04-15 06:13:39 +08:00
ES Solr Lucene 解决不了 like %foo% 中文默认单字分词的时候可以按字搜出来 但这不是 like %foo% 而是 in (f, o, o)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/770500

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX