SELECT from_unixtime(timestamp,'%Y-%m-%d') day, count(distinct(mac)) macsum FROM `list` WHERE (`timestamp` BETWEEN 1494604800 AND 1495166463) AND (`softId`=1) GROUP BY `day` ORDER BY `day` DESC建了索引 timestamp,mac,excType,softid 目前300多万条的数据查询耗时要3到4秒,请问有什么优化的空间吗?

解决方案 »

  1.   

    如果去掉其中的distinct会缩短一大半的时间,可是又需要去重这个条件
      

  2.   

    最后结果返回了多少条数据?另外,应该是distinct排序消耗了大量的时间。
      

  3.   

    试试这个:select day,count(mac) as macsum
    from 
    (
    SELECT from_unixtime(timestamp,'%Y-%m-%d') day, 
           mac
    FROM `list` 
    WHERE (`timestamp` BETWEEN 1494604800 AND 1495166463) AND (`softId`=1) 
    GROUP BY `day`
    ) v
    group by day 
    ORDER BY `day` DESC
      

  4.   

    timestamp 要建索引,然后如果timestamp` BETWEEN 1494604800 AND 1495166463 这个条件下还有300万的话,3-4秒还可以了。