5

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

谢谢。

4

5 回答 5

3

我为两个列scenedevice_id和module_id创建了一个索引,现在执行时间是0ms :)

谢谢大家的帮助,伙计们:)

于 2012-08-16T12:16:30.387 回答
3

尝试

SELECT MAX(id)
FROM table1
于 2012-08-16T08:30:32.333 回答
2

只是另一种方式

select * from TableName where ColumnID = (Select max(ColumnID) from TableName)
于 2013-10-09T10:14:53.757 回答
0

试试这个解决方案来获取该行的所有列:

SELECT a.*
FROM   realtimedevicedata a
JOIN   (SELECT MAX(id) AS id FROM realtimedevicedata) b ON a.id = b.id
于 2012-08-16T08:40:24.750 回答
0

我不知道它是否真的更快,但你可以尝试一下:

SELECT * FROM table1 WHERE id = MAX( id );

UPDATE是获取最少插入行的正确查询,应为:

SELECT * FROM `table1` WHERE `id` = ( SELECT MAX(`id`) FROM `table1` )
于 2012-08-16T08:31:43.593 回答