主表大约30多万条记录,left join 几次翻译表,然后利用where COALESCE(中文,英文)= 关键字 模糊查询需要的数据,这个查询条件不加的时候耗时几毫秒完成,加上模糊查询条件后2min 各位大神有什么办法能优化一下呢

解决方案 »

  1.   


    SELECT DISTINCT  id,一些COALESCE(CONVERT(),CONVERT())函数
    FROM p JOIN b 
    LEFT JOIN 翻译表 x1 ON x1.xid = p.Name 
    LEFT JOIN 翻译表 x2 ON x2.xid = p.Number
    LEFT JOIN 翻译表 x3 ON x3.xid = b.Code
    WHERE b.id = p.bID 
     AND p.bID > 0 
     AND COALESCE(CONVERT(),CONVERT())函数 LIKE '%xxxx%' 
    ORDER BY p.name LIMIT 15;当有order by 的时候 show processlist显示创建临时表, 删掉orderby显示send data 没有order by和模糊查询时候就1S内查完 都有用的只有主键索引,innodb不能创建全文索引
      

  2.   


    p.name 上建个索引试试
      

  3.   


    试过了  用了name索引 除非把模糊查询 和distinct去掉 不然还是建临时表 很慢 
      

  4.   

    以文本方式贴出 
    explain select ...
    show index from ..
    以供分析。
      

  5.   

    id select_type table   type possible_keys    key key_len ref        rows             Extra
    1 SIMPLE          p   ALL        \N                \N        \N  \N   299070 Using where; Using temporary; Using filesort
    1  SIMPLE          b   eq_ref PRIMARY PRIMARY 4 p.bID 1
    1 SIMPLE          x1   eq_ref PRIMARY PRIMARY      10    p.Name      1                  Using where
    1 SIMPLE          x2   eq_ref PRIMARY PRIMARY      10    p.Number   1
    1 SIMPLE          x3   eq_ref PRIMARY PRIMARY      10    b.Code      1 抱歉新手开始没懂什么意思, 这个查询数据表不全 所以没有查出结果 这是还没在P。name上加索引之前的,加了索引第一个用了p。name索引 但还是有用临时表
      

  6.   

    请把SQL语句也同时贴出。
      

  7.   

    他贴了sql语句了呀,坐等@acma 版主回答。