我有以下查询:
SELECT * FROM `alltrackers`
WHERE `deviceid`='FT_99000083401624'
AND `locprovider`!='none'
ORDER BY `id` DESC
这是显示创建表:
CREATE TABLE `alltrackers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`deviceid` varchar(50) NOT NULL,
`gpsdatetime` int(11) NOT NULL,
`locprovider` varchar(30) NOT NULL,
PRIMARY KEY (`id`),
KEY `statename` (`statename`),
KEY `gpsdatetime` (`gpsdatetime`),
KEY `locprovider` (`locprovider`),
KEY `deviceid` (`deviceid`(18))
) ENGINE=MyISAM AUTO_INCREMENT=8665045 DEFAULT CHARSET=utf8;
我已经删除了我认为对于这个问题没有必要的列。
这是此查询的 EXPLAIN 输出:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE alltrackers ref locprovider,deviceid deviceid 56 const 156416 使用where;使用文件排序
此特定查询在 mytop (mtop) 中显示为需要几秒钟。不过,我有点困惑,因为相同的查询但具有不同的“deviceid”并不需要很长时间。虽然我只需要最后一行,但我已经删除了 LIMIT 1,因为这样会花费更长的时间。该表当前包含 300 万行。
它用于存储来自不同 GPS 设备的位置。每个 GPS 设备都有一个唯一的设备 ID。位置进来并被添加到表中。对于统计信息,我正在运行上述查询以查找从某个设备上次接收到位置的时间。
我愿意就进一步优化查询甚至表的方法提出建议。
提前谢谢了。