简单描述一下,有一张搜索历史记录表,非常简单,主要字段就是 word,搜索的字或者句,不去重,数量级可能达到千万级别,现在有一个需求就是根据用户输入的字或者词匹配最近 5 条不重复历史搜索记录!
word 字段可能是中英文,建了索引,查询用的 like, 查询语句是:
select word from table where word like '$word%' limit 100
查询前 100 条,然后在代码里面去重,遇到的问题:
1.前 100 条可能都是重复的,这样去重之后不足 5 条,查 200 条? 300 条?还是 500 条?太不靠谱了
2.即使建了索引,查询一些单词也会扫描几十万行,因为库里面重复的单词比较多,还是很慢
有没有什么好的办法优化一下?
1
purebluesong 2018-04-25 14:13:50 +08:00
上 es ?
|
2
woosdaf 2018-04-25 15:06:34 +08:00
重新拆分 建立新表去查啊,解决慢查询最核心的方法就是不查.少查
|
3
noNOno 2018-04-25 16:50:10 +08:00
你的意思是,该用户的历史搜索记录?
这样的话可以先根据 userid 走索引过滤,再 like 的时候数据量不会很大 |