SELECT sql_cache inc.I_id, inc.I_logo, inc.I_name, inc.I_mode, inc.I_regfinanc, inc.I_Y, inc.I_mostly, inc.I_create, inc.I_province, inc.I_city, inc.I_hit, inc.I_Nikname,
Data1.Ipq, Data1.Online, Data1.HeadNumb, (TGPasteNum * 10 + TGRepasteNum + TGClickNum + IndivGrade) AS Grade, (YEAR(NOW()) - I_create) AS CCcreate,
MAX(if(if(bp_edtime,bp_edtime,bp_time),if(bp_edtime,bp_edtime,bp_time),if(I_time1,I_time1,I_time))) AS retime, COUNT(bp_id) AS sumre, 
((I_regfinanc * y_rate)/100) AS ratermb
FROM inc LEFT JOIN Data1 ON I_Nikname = NiceName 
LEFT JOIN bizpaste ON inc.I_id =  bizpaste.I_id
LEFT JOIN ymbhl ON inc.I_Y = ymbhl.y_na
WHERE inc.I_id >0 
GROUP BY inc.I_id, inc.I_logo, inc.I_name, inc.I_mode, inc.I_regfinanc, inc.I_Y, inc.I_mostly, inc.I_create, inc.I_province, inc.I_city, inc.I_hit, inc.I_Nikname,
Data1.Ipq, Data1.Online, Data1.HeadNumb ;
用上面的语句查询特别慢啊。怎么优化一下?
表inc有10W条记录。
表Data1有10W。
表bizpaste有6W。
表ymbhl有10条记录。

解决方案 »

  1.   

    在bizpaste.I_id
      ymbhl.y_na
      NiceName
    建立索引再试试
      

  2.   

    已建索引。我测试了,我把LEFT JOIN改成inner join就很快。但是结果不是我想要的。我这些表记录都不是对等的。所以用inner join虽然快但是解决不了我的问题。还有什么好方法?
      

  3.   

    你这2个表bizpaste,ymbhl好像没有任何意义吗?至少我不知道在你的select里面有否出现他们的字段如果是left join的话,而且select里面没有他们的字段,你完全可以把这个条件去除还有就是我觉得你的group by的东西太多,肯定有的是重复的,你可以用最简单的group by Select出来你要的结果,然后再用关联把你需要的别的字段的信息再联进来,如:select t2.cc,a.aa from t2 inner/left join (select sum(aa) aa,bb from t1 group by bb)a on t2.bb=a.bb;