A表如下,还有自动增长的字段及其他不重要的字段。表约有两千五百万条记录。sid | op | code 
3  | 1 |  -199
1  | 2 |  0
11 | 1 |  1
3  | 2 |  0我想查询出code为0,op为1的sid的个数,我写的sql语句如下:select sid,count(*) as num from A where code=0 and op=1 group by sid order by num desc limit 10;这个执行时间要30秒。。时间太长了,求优化

解决方案 »

  1.   

    表索引情况如何、code、op有多少种值
      

  2.   

    索引如下: PRIMARY KEY (`id`),
      KEY `sid` (`sid`),
    ) ENGINE=InnoDB AUTO_INCREMENT=22241971 DEFAULT CHARSET=utf8 | op有两种值,code有3种。
      

  3.   

    create index xxx on A表(code,op,sid)
      

  4.   

    没什么影响,看一下你的CPU利用率。
      

  5.   

    执行30秒  应该是进行了全表扫描  这时候io利用比较高如果这个语句执行频率非常低  可以接受  如果频率非常高 则要加索引(code,op,sid)
      

  6.   

    针对code,op组合查询使用频繁的话,还是建议建立索引的。把*改成某个字段看看