两个表,一个表是三万条数据,另一个表是二十万条数据
两个表连接后进行检索数据,现在得二十秒,如何能够提高效率
检索的字段是text类型,使用的是 like '%关键字%'

解决方案 »

  1.   

    LIKE查询的效率是非常低的,应该用MySQL的全文搜索功能,具体见手册:
    http://dev.mysql.com/doc/refman/5.1/zh/functions.html#fulltext-search
      

  2.   

    用不到索引的。
    like '%关键字%'想办法换成
    like '关键字%'
      

  3.   


    必须要求是like '%关键字%',我也知道这样不优化,但是需求就是如此,还有没有其它方式解决方案了
      

  4.   

    SQL代码?在哪个字段上建立的索引?
      

  5.   

    在查询关键字上建立索引也没有解决问题,因为此字段存入的是内容,是TEXT类型
      

  6.   

    详细说一下
    A表
    字段名称  说明        类型       主键
    hy_id    会员ID    Vc(50)    是
    hy_name  会员名称   Vc(50)    否
    hy_dj    会员等级   Vc(50)    否
    cx_dj    诚信等级   int(5)    否
    note     备注      Vc(50)    否
    ...........此表三万条数据
    B表
    字段名称       说明        类型          主键
    forum_id    贴子ID     bigint(20)    是
    hy_id       会员ID     Vc(50)        否
    title       标题        Vc(50)        否
    content     内容        text          否
    forum_date  日期        bigint(20)    否
    fb_bs       发布标识    Vc(50)        否
    hf_id       回复ID     bigint(20)    否
    ........
    此表有二十万条数据
    此表建立索引有:hy_id, hf_id,title,content现在的查询的语句是:
    select forum_id,title,forum_date,b.hy_id,hy_name,cx_dj from b left join a on a.hy_id=b.hy_id where fb_bs='Y' and hf_id=0 and qq like '%" + value + "%'现在查询时间得二十秒,在计算分页之类的,合计得三十多秒!!
    网站为:http://gq.51ey.com 进入后点击热门搜索的任一链接都可以测试,非常慢,接受不了!
    其它数据库查询还可以接受!!
    运行平台:tomcat+jsp+mysql,数据库连接方式用是连接池
    现求解决方案,提高查询效率!!在此谢谢大家了如果有良好的解决方案,可以付费
    联系方式:QQ 508367251   MSN  [email protected]
      

  7.   

    更正一下代码,运行的语句为:select forum_id,title,forum_date,b.hy_id,hy_name,cx_dj from b left join a on a.hy_id=b.hy_id where fb_bs='Y' and hf_id=0 and content like '%" + value + "%' 
      

  8.   

    如果你们的业务比较规范,建义你看看:sphinx这个也许能帮助你。
      

  9.   

    MYSQL的全文搜索对中文支持还有问题,
    LIKE本来速度就慢,QQ是哪个表的?
      

  10.   

    写错了,没有QQ是content,不好意思!!如何解决啊,大家帮帮忙吧!!天天挨训!!
      

  11.   

    目录的mySQL版本下,没什么好的方法,换个SERVER试试了。.
        [align=center]====  ====
    [/align]
    .
    贴子分数<20:对自已的问题不予重视。
    贴子大量未结:对别人的回答不予尊重。
    .
      

  12.   

    在like那个字段建立索引,然后explain一下。mysql多个索引时不一定会用到你键的索引(看mysql的文档说明),全文索引我个人认为不合适
      

  13.   

    不知道INSTR、LOCATE这些函数的运行速度是否比LIKE快一些,可以试试
      

  14.   

    谢谢各位的回复
    现在还没有解决方案,我用INSTR也没有提高速度!
      

  15.   

    修改你的sql语句,b.hy_id和a.hy_id相等就用下面的语句:
    select forum_id,title,forum_date,a.hy_id,hy_name,cx_dj 
    from b left join a on a.hy_id=b.hy_id 
    where fb_bs='Y' and hf_id=0 and content like '%" + value + "%' 既然必须用like '%关键字%' ,就只能尽量从其他where条件方面优化
    1>select 中的字段顺序按原来数据表中的顺序来写,有利于速度
    2>对fb_bs,hf_id分别建立索引,优化检索时间
    3>如果hy_id字段没有建索引,就也加上索引
      

  16.   

    explain 结果帖上来,大家在帮你分析
      

  17.   

    楼主这类型的问题不应该期望从具体程序编写上解决,应该从系统的设计上下功夫。
    本身字符串比较就是很消耗数据资源的运算,即使你建立了索引。对于大字段(text)
    比较对比速度也是很慢的。你可以根据下一些思路尝试解决问题:
    1 增加缓存表或者影相表,存储一些常用记录
    2 为查询次数比较多的关键字,建立短途查询(像Google 那样的搜索引擎)
      

  18.   

    说句心里话 我不知道的  可以试用哈oracle  呵呵
      

  19.   

    数据库查询方式解决不了,目前打算用lucene来解决!!
    不知道高手们还有什么方案