where dateline between UNIX_TIMESTAMP('2008-11-01') and UNIX_TIMESTAMP('2008-12-01') group by fid,date换成between  and 试试看,并在dateline 字段建立索引..

解决方案 »

  1.   


    SELECT COUNT(*) AS cnt, fid, FROM_UNIXTIME(dateline,'%e') AS date
    FROM cdb_posts  
    WHERE FROM_UNIXTIME(dataline, '%Y-%m-%e') = '2008-11'
    GROUP BY date
    为啥要group by fid, date两个呢,总是感觉不太好.
    不过你非要加上也没有办法.
      

  2.   

    因为选择的字段有 fid,不用fid来gorup by 是选择不了的。。UNIXTIME(dataline,'%Y-%m')='2008-11'这个也改成这样吧。
      

  3.   

    主要是FROM_UNIXTIME(dateline,'%e')AS date,后面有group by fid,date
    mysql 中用了函数的话,原本dateline上的索引应该会不起作用,因为mysql要从新计算值UNIXTIME(dataline,'%Y-%m')='2008-11'这个也改成这样吧。
    会更慢吧,在where子句中用的话,全表都要计算在比较,不如转成时间戳dateline取范围
    dateline已经有索引了