我想获取MySql表中的最后一条记录,但该表有250万行。如何有效地获得最后一行?
我正在使用顺序和限制,但查询运行大约15秒。我必须将此值减小到接近零。
我的SQL查询:
SELECT id FROM table1 WHERE scenedevice_id = X AND module_id = Y ORDER BY id DESC LIMIT 0,1
编辑:我也尝试了MAX(id)。
编辑:这是我的表 -
CREATE TABLE IF NOT EXISTS `realtimedevicedata` (
`id` int(11) NOT NULL auto_increment,
`scenedevice_id` int(11) NOT NULL,
`module_id` int(11) NOT NULL,
`subid` tinyint(4) NOT NULL default '1',
`value` varchar(30) collate utf8_turkish_ci NOT NULL,
`timestamp` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `scenedevice_id` (`scenedevice_id`),
KEY `module_id` (`module_id`),
KEY `timestamp` (`timestamp`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci AUTO_INCREMENT=2428598 ;
感谢。
答案 0 :(得分:3)
我为两列场景device_id和module_id创建索引,执行时间现在为0ms:)
感谢所有人的帮助,伙计们:)
答案 1 :(得分:2)
尝试
SELECT MAX(id)
FROM table1
答案 2 :(得分:2)
另一种方式
select * from TableName where ColumnID = (Select max(ColumnID) from TableName)
答案 3 :(得分:0)
我不知道它是否真的更快,但你可以尝试一下:
SELECT * FROM table1 WHERE id = MAX( id );
UPDATE ,获取插入最少的行的正确查询应为:
SELECT * FROM `table1` WHERE `id` = ( SELECT MAX(`id`) FROM `table1` )
答案 4 :(得分:0)
尝试此解决方案以获取该行的所有列:
SELECT a.*
FROM realtimedevicedata a
JOIN (SELECT MAX(id) AS id FROM realtimedevicedata) b ON a.id = b.id