select a.cid,a.companyname,b.id,b.jobname
from company a 
inner join job b on b.cid=a.cid and b.id in (select max(id) from job group by cid order by retime desc) 
order by a.retime desc
limit 10上面语句执行效率低,  select max(id) from job group by cid order by retime desc这段语句会读取所有记录数形成一个临时表, job表中有几万条数据了, company表也有几千条记录. 想按job刷新时间(retime)来排序,只取前10条记录, 这样形成的临时表就只有 10 条, 应该会大大增加执行效率.若是我的思路有问题, 是否有其它提高语句执行效率的方法?

解决方案 »

  1.   

    select a.cid,a.companyname,b.id,b.jobname
    from company a 
    inner join job b on b.cid=a.cid 
    inner join (select max(id) as ma from job group by cid order by retime desc) c
    on b.id=c.ma 
    order by a.retime desc
    limit 10
      

  2.   


    select a.cid,a.companyname,b.id,b.jobname
    from company a 
    inner join job b on b.cid=a.cid and b.id =(select max(id) from job where cid=a.cid) 
    order by a.retime desc
    limit 10
      

  3.   

    select *
    from job inner join company using(cid)
    order by retime
    limit 10如果你的job 表上有索引 retime, 
    company 主键为cid 的话,上面这个语句就行了。不必要那么复杂。