我有个表service_message大概有60万条数据,表中记录了不同设备收到消息的时间:
SHOW CREATE TABLE service_message
CREATE TABLE `service_message` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`device_id` INT(11) NOT NULL COMMENT '设备Id',
`property_id` INT(11) NOT NULL COMMENT '服务Id',
`value` TEXT NOT NULL COMMENT '数值',
`time` DATETIME NOT NULL COMMENT '数据上报时间',
PRIMARY KEY (`id`),
KEY `device_id` (`device_id`),
KEY `time` (`time`),
KEY `property_id` (`property_id`)
) ENGINE=INNODB AUTO_INCREMENT=844512 DEFAULT CHARSET=utf8
我需要从中按设备id统计最新的时间值。我的sql语句是这样写的:
SELECT device_id,MAX(`time`) AS`time` FROM service_message GROUP BY device_id
查询时间要3~4秒,很慢。
我用explain
看了执行计划,但是我是小白,看不懂:
所以。我的问题是,有没有优化的方法?
看你的数据好像id越大,time就越大,所以不妨换个思路