5

MySqlテーブルの最後のレコードを取得したいのですが、テーブルには250万行があります。最後の行を効率的に取得するにはどうすればよいですか?

順序と制限を使用していますが、クエリは約15秒実行されます。この値をほぼゼロに減らす必要があります。

私のSQLクエリ:

SELECT id FROM table1 WHEREscenedevice_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

試す

SELECT MAX(id)
FROM table1
于 2012-08-16T08:30:32.333 に答える
3

2つの列scenedevice_idとmodule_idのインデックスを作成しましたが、実行時間は0msになりました:)

皆さん、助けてくれてありがとう:)

于 2012-08-16T12:16:30.387 に答える
2

ちょうど別の方法

select * from TableName where ColumnID = (Select max(ColumnID) from TableName)
于 2013-10-09T10:14:53.757 に答える
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 に答える
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 に答える