问个问题,我有100万条企业名称,如果用  like %企业名称% 来查询,是不走索引的。查询一次需要耗时5-7秒。 如果用了全文检索引擎,出现查询结果不完全的情况,因为全文检索引擎是自动分拆单词的。 例如 北京天安门,查询京天 就查询不到。使用mycat和hadoop后,速度提升到2秒左右,但是在50并发下,不走索引,时间也超过了40秒。这个还有解吗? 

解决方案 »

  1.   

    用这种方式,like 企业名称%  可以使用索引,但不知道符不符合需求;
    或者使用LOCATE(关键字,字段名称)>0,试试速度怎么样
      

  2.   

    建议采用es做,底层的倒序索引可以解决模糊搜索的问题,需要搭建服务器即可,网上有很多es的教程,es建立良好的索引性能肯定是翻倍的。数据库中的内容依据场景同步到es中即可。
      

  3.   

    100万数据不算很大, 尽可能把 名称字段的长度改小(比如实际最大只有50位长度,那就设置为80) 
    再按下面的做法试下:
    #1. 创建临时表
    CREATE TEMPORARY TABLE tmp (id bigint primary key);#2. 将相关数据的主键插入到临时表中, 
    insert into tmp(id)
    select id from tb where theName like '%企业名称%';#3. 查询得到实际的结果
    select * from tb as a inner join tmp as b on a.id=b.id;#4. 删除临时表
    drop TEMPORARY table tmp;
    当然, 最好的做法还是 ES.
      

  4.   

    楼上的方法,肯定还是慢的, 还是要上全文检索。我推荐sphinx
      

  5.   

    不要信口开河, 试过了再说。 
    DBA 很多东西是试出来的, 不是想出来的
      

  6.   

    不要信口开河, 试过了再说。 
    DBA 很多东西是试出来的, 不是想出来的不要信口开河, 试过了再说。 
    DBA 很多东西是试出来的, 不是想出来的我是试过的, 用like就是慢, 100w数据, 
      

  7.   

    不要信口开河, 试过了再说。 
    DBA 很多东西是试出来的, 不是想出来的不要信口开河, 试过了再说。 
    DBA 很多东西是试出来的, 不是想出来的我是试过的, 用like就是慢, 100w数据, 
    你要用我的代码试, 而不是用你的办法。
      

  8.   

    您这里LIKE企业名,企业名应该是有字典表之类的东西吧,能不能单独加一个字段,存储企业名,最好是存企业ID,然后直接等号查询。