et_content  内容表 数据300w
content_id  user_id
文章id      用户id\et_friend  用户好友表 数据50w
fid_fasong  fid_jieshou
我的id      我加的好友id目的查询出我的好友的发帖
现在2种方式都不是很理想
a:
SELECT * FROM   et_friend where fid_fasong=$user[user_id];
出来(id,id,id,id,id,id,id,id,id,id)可能出来500个
SELECT * FROM   et_content where  user_id in (id,id,id,id,id,id,id,id,id,id) and conttype != 'reply'  c.content_id>1000000;
由于in里的好友可能比较多 比如有500个
慢日志里有很多记录
b:
SELECT * FROM et_content AS c LEFT JOIN et_friend AS f ON c.user_id=f.fid_jieshou WHERE  c.content_id>1000000 and f.fid_fasong='$user[user_id]' and conttype != 'reply' ORDER BY c.content_id DESC LIMIT $start,10"
2表left join 
经常出错误 Incorrect key file for table '/tmp/#sql_192a_0.MYI'; try to repair it
估计是内存等不够求大家给个好的优化思路,谢谢

解决方案 »

  1.   

    索引情况如何
    user_id上建立索引没有B:
    建立索引试试
    et_content :content_id、conttype
    et_friend:id_fasong
      

  2.   

    LEFT JOIN ?不应该是 inner join 么?left join 把数据少的表 放在前面。或者 SELECT * FROM et_content where user_id in(Select fid_jieshou * from et_friend Where fid_fasong='$user[user_id]' ****) and ****
      

  3.   

    创建复合索引。
    create index xx on et_content(user_id,conttype,content_id)
      

  4.   

    explain出来
      

  5.   

    explain sql
    贴结果
      

  6.   

    create index aaa on et_content(user_id,conttype,content_id)