I want to get the last record in my MySql table, but the table has 2.5 million rows. How to get the last row efficiently?

I'm using order and limit but the query runs ~15sec. I have to decrease this value to nearly zero.

My SQL Query :

SELECT id FROM table1 WHERE scenedevice_id = X AND module_id = Y ORDER BY id DESC LIMIT 0,1

EDIT : I tried MAX(id) also.

EDIT : Here is my table -

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 ;

Thanks.

有帮助吗?

解决方案 2

I create an index for two coloumns scenedevice_id and module_id, and execution time is now 0ms :)

Thank you for all help, folks :)

其他提示

Try

SELECT MAX(id)
FROM table1

Just another way

select * from TableName where ColumnID = (Select max(ColumnID) from TableName)

I don't know if it's really faster, but you could try something along:

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

UPDATE, the correct query to get the least inserted row, should read:

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

Try this solution to get all columns of the row:

SELECT a.*
FROM   realtimedevicedata a
JOIN   (SELECT MAX(id) AS id FROM realtimedevicedata) b ON a.id = b.id
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top