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
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
或先去掉SQL_CALC_FOUND_ROWS测试看看
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
====================================================
order by不同的表字段,mysql没法走索引。
from tab1 as d left join==========================
d是左表,肯定是全表扫的。你的考虑下你的实际情况是不是需要tab1的整表数据。