V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
GoPHP
V2EX  ›  程序员

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

  •  
  •   GoPHP · 2018-04-25 13:42:51 +08:00 · 2052 次点击
    这是一个创建于 2397 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    purebluesong
        1
    purebluesong  
       2018-04-25 14:13:50 +08:00
    上 es ?
    woosdaf
        2
    woosdaf  
       2018-04-25 15:06:34 +08:00
    重新拆分 建立新表去查啊,解决慢查询最核心的方法就是不查.少查
    noNOno
        3
    noNOno  
       2018-04-25 16:50:10 +08:00
    你的意思是,该用户的历史搜索记录?
    这样的话可以先根据 userid 走索引过滤,再 like 的时候数据量不会很大
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2793 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 09:48 · PVG 17:48 · LAX 01:48 · JFK 04:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.