SELECT u.company, u.zy, u.tel, u.user, m.uptime
FROM mm_info m
LEFT JOIN (
mm_user u
) ON ( m.userid = u.userid ) 
WHERE m.catid !=  ''
AND u.zy !=  ''
GROUP BY m.userid
ORDER BY m.uptime DESC 
LIMIT 0 , 39
这需要(39 总计, 查询花费 1.9012 秒)
但去了GROUP by语句后只需要(39 总计, 查询花费 0.2298 秒).
mm_info和mm_user的Userid我都做的索引.
求助..有没有别的方法..我需要分组Userid

解决方案 »

  1.   

    有一点没看懂,你分组是要统计分组的什么呢?group by的话,是求和哪个字段么?然后是索引,因为你where匹配的是catid和zy,如果经常查这两个字段的话,对这两个字段建索引要比对主键建索引要快,否则主键的索引就对where的筛选起不到作用了。所以这里的话,索引只有在left join的时候有用。分析一下数据库查询策略吧,sybase的话自己就有,mysql用explain看一下咧。我差不多就知道这些吧
      

  2.   

    在userid上创建索引如果仍不理想,则楼主贴出你的explain SELECT u.company, u.zy, u.tel, u.user, m.uptime
    FROM mm_info m
    LEFT JOIN (
    mm_user u
    ) ON ( m.userid = u.userid ) 
    WHERE m.catid !=  ''
    AND u.zy !=  ''
    GROUP BY m.userid
    ORDER BY m.uptime DESC 
    LIMIT 0 , 39;
    show index from mm_info;
    show index from mm_user;以供别人进一步分析。
      

  3.   

    我做过索引..就是加上了GROUP 防语句后执行时间较长..
    想问问各位有没有什么优化手段.
      

  4.   

    楼主的SQL看,没必要有外连接
      

  5.   

    能解释一下两张表的关系吗?
    如果是max(m.uptime)我可以理解,但是没有看到sum/max什么的,而且理论上mm_user也不可能重复,所以,貌似没有必要使用group by啊。
      

  6.   


    +1
    没有explain 分析不了
    另外你的索引信息给出,你这个语句的几个地方加索引可能还比不加的小女差,多多分析
      

  7.   


    谢谢各位..我是通过explain 分析原因了..是因为我的索引和主键一起索了..结果就没用到索引..
    现以更新.谢谢各位!