本帖最后由 xiachao2008 于 2012-01-29 14:47:56 编辑

解决方案 »

  1.   

    需要帮你移到mysql 板块吗?那的sql 牛人比较多.不过你要是要用like 那效率肯定是不高的
      

  2.   

    三个表中app_id是主键吗? 如果不是建立索引试试。
      

  3.   

    left join的话效率一般取决于左表的规模,所以你必须确保左表能有高效率的扫描,尽可能保证左表为索引扫描而非全表扫,当然你的问题并非索引问题,光一个like 中文数据就够你研究的了。
    like 'sss%' 这样才有可能用到索引,但是'sss%'并不服合你当前的需求,并不能正确搜出你的预想数据,改用fulltext类型使用全文索引又不支持中文,且即使是英文也有一些配置上的问题需要解决,可以的话你可以用用sphinx
      

  4.   

    贴出你的语句和 explain select ..的结果。
      

  5.   

    on(a.id=b.id and a.id=c.id)
      

  6.   

    我也遇到这个问题,有两种解决办法
    第一种:分两次查询,生成两个结果集。等到加载数据的时候,利用缓存匹配(我用的DatabTable,很好查找,匹配)
    第二种:看到网上的方法,也是我推荐采用的,联接查询换成关联子查询。速度的确快乐很多
    原先Sql
    SELECT * FROM 
    (...子查询....)A
    LEFT JOIN 
    (...子查询....)B ON A.键 = B.键
    更改后Sql
    SELECT A.*,
    (SELECT B.B1+'*#*'+B.B2+'*#*'+B.B3+'*#*')BColumn
     FROM (....子查询...)A
    说明下:由于关联子查询只能返回一个值,所已我把B表每一列组合起来,加载的时候再去解析。
    第一种方法不好的地方在于,如果B表数据量很大,10万条。我想通过内存去匹配,加载的时候也会很卡(虽然不再与数据库打交道了)
      

  7.   

    Sorry,经测试第一种方法才是王道,还是内存好!