select so.userid,sum(so.price) as price,count(so.orderid) as num from so
 where so.deleteflag = 0  and so.createdate>='2008-05-01 00:00:00'
   and so.createdate<'2008-06-01 00:00:00' group by so.userid order by num desc这个是SQL语句,
数据总共只有6万条的样子,但是查询的速度很慢,有什么方法可以让速度变快?

解决方案 »

  1.   

    分别建索引在
    deleteflag
    createdate[align=center]====  ====
    [/align]
      

  2.   

    liuyann   在createdate 上已經建了索引了,另外一個deleteflag 是狀態位也要建嗎?
      

  3.   

    group by so.userid 
    之后的数据量是多少?多少记录?[align=center]====  ====
    [/align]
      

  4.   

    136條.. 应该问题不在GROUP BY 后的ORDER,
    userid有INDEX吗?[align=center]====  ====
    [/align]
      

  5.   

    1、建立索引
    2、加大tmp_table_size系统变量的值。
      

  6.   

    mysql>explain select so.userid,sum(so.price) as price,count(so.orderid) as num from so 
     where so.deleteflag = 0  and so.createdate>='2008-05-01 00:00:00' 
       and so.createdate <'2008-06-01 00:00:00' group by so.userid order by num desc ;
    执行后,看看有没有可以优化的地方。
      

  7.   

    把SUM和COUNT分开操作,也就是写成两条SQL语句,看看速度怎么样?