如何在2.5米行的MySql中获取最后一条记录

时间:2012-08-16 08:29:47

标签: mysql sql optimization sql-optimization

我想获取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 ;

感谢。

5 个答案:

答案 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