実行に 1 秒以上かかることがある MySQL クエリがあります。クエリは次のとおりです。
SELECT `id`,`totaldistance` FROM `alltrackers` WHERE `deviceid`='FT_99000083426364' AND (`gpsdatetime` BETWEEN 1341100800 AND 1342483200) ORDER BY `id` DESC LIMIT 1
このクエリは、月の特定の日などに行を取得するためにループで実行されます。これにより、ページの読み込みに 25 秒以上かかることがあります...
テーブル構造は次のとおりです。
CREATE TABLE IF NOT EXISTS `alltrackers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`deviceid` varchar(50) NOT NULL,
`lat` double NOT NULL,
`long` double NOT NULL,
`gpsdatetime` int(11) NOT NULL,
`version` int(11) DEFAULT NULL,
`totaldistance` int(11) NOT NULL DEFAULT '0',
`distanceprocessed` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `id_deviceid` (`id`,`deviceid`),
UNIQUE KEY `deviceid_id` (`deviceid`,`id`),
KEY `deviceid` (`deviceid`),
KEY `deviceid_gpsdatetime` (`deviceid`,`gpsdatetime`),
KEY `gpsdatetime_deviceid` (`gpsdatetime`,`deviceid`),
KEY `gpsdatetime` (`gpsdatetime`),
KEY `id_deviceid_gpsdatetime` (`id`,`deviceid`,`gpsdatetime`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=677242 ;
MySQLにクエリのインデックスを使用させるために、あらゆる種類のインデックスの組み合わせを追加しました(どれを削除するか教えてください)が、役に立ちません。
EXPLAIN の出力は次のとおりです。
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE alltrackers index deviceid_id,deviceid,deviceid_gpsdatetime,gpsdatet... PRIMARY 4 NULL 677238 Using where
ORDER BY ASC/DESC LIMIT 1 を使用している理由は、クエリの最初と最後の行が必要だからです。LIMIT 1 なしでクエリを実行し、PHP を使用して最初と最後の行を取得する方が高速でしょうか?
助けてくれて本当にありがとうございます!