explain select SQL_CALC_FOUND_ROWS d.id,d.goodlevel,d.ismainfield,d.lirun,d.introduce,d.shen,d.city,d.mainfield,d.charges,d.type,m.indentity,m.nick as name,m.username,d.cxt_num,v.vnum 
from tab1 as d left join tab2 as m on d.id=m.uid left join tab3 as v on d.id=v.uid order by d.goodlevel desc,d.cxt_num desc,v.vnum desc limit 10,10

解决方案 »

  1.   

    tab1  id      cxt_numtab2  uidtab3  uid是索引
      

  2.   

    那你explain 有没看到跑索引了。
    或先去掉SQL_CALC_FOUND_ROWS测试看看 
      

  3.   

    id select_type table type possible_keys key key_len ref rows Extra 
    1 SIMPLE d ALL (NULL) (NULL) (NULL) (NULL) 346176 Using temporary; Using filesort 
    1 SIMPLE m eq_ref PRIMARY PRIMARY 3 d.id 1   
    1 SIMPLE v eq_ref PRIMARY PRIMARY 4 d.id 1   
      

  4.   

    order by d.goodlevel desc,d.cxt_num desc,v.vnum desc
    ====================================================
    order by不同的表字段,mysql没法走索引。
      

  5.   

    不知道你的业务,不好改。上面说到索引,其实你这现在这个语句加不加索引也一样
    from tab1 as d left join==========================
    d是左表,肯定是全表扫的。你的考虑下你的实际情况是不是需要tab1的整表数据。