如何解决这种 SQL 查询慢问题?

2018-04-25 13:42:51 +08:00
 GoPHP

简单描述一下,有一张搜索历史记录表,非常简单,主要字段就是 word,搜索的字或者句,不去重,数量级可能达到千万级别,现在有一个需求就是根据用户输入的字或者词匹配最近 5 条不重复历史搜索记录!

word 字段可能是中英文,建了索引,查询用的 like, 查询语句是:

 select word from table where word like '$word%' limit 100

查询前 100 条,然后在代码里面去重,遇到的问题:

1.前 100 条可能都是重复的,这样去重之后不足 5 条,查 200 条? 300 条?还是 500 条?太不靠谱了

2.即使建了索引,查询一些单词也会扫描几十万行,因为库里面重复的单词比较多,还是很慢

有没有什么好的办法优化一下?

2068 次点击
所在节点    程序员
3 条回复
purebluesong
2018-04-25 14:13:50 +08:00
上 es ?
woosdaf
2018-04-25 15:06:34 +08:00
重新拆分 建立新表去查啊,解决慢查询最核心的方法就是不查.少查
noNOno
2018-04-25 16:50:10 +08:00
你的意思是,该用户的历史搜索记录?
这样的话可以先根据 userid 走索引过滤,再 like 的时候数据量不会很大

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

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

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

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

© 2021 V2EX