次の構造のテーブルがあります
SHOW CREATE TABLE data_temperature;
CREATE TABLE `data_temperature` (
`temperature_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`data_id` bigint(20) unsigned NOT NULL,
`x_id` varchar(32) DEFAULT NULL,
`x_sn` varchar(16) DEFAULT NULL,
`x_unit` char(1) DEFAULT NULL,
`x_value` decimal(6,2) DEFAULT NULL,
PRIMARY KEY (`temperature_id`),
KEY `created` (`created`),
KEY `data_id` (`data_id`),
KEY `x_value` (`x_value`)
) ENGINE=InnoDB AUTO_INCREMENT=6274618 DEFAULT CHARSET=latin1
ここからデータを取得する基本的なクエリがありますが、これは非常に遅いです。そのため、クエリをより単純な用語に分解したところ、この非常に単純なクエリは遅い (17.52 秒) ことがわかりました。
SELECT data_temperature.x_value FROM data_temperature WHERE data_temperature.created BETWEEN '2015-02-02 18:28:42' AND '2015-03-04 18:28:42';
テーブルには 6,274,617 行あります。実際、SELECT COUNT(*) FROM data_temperature
3.66 秒もかかります。
このクエリが実行されているシステムは私の開発システムで、Ubuntu 14.04 を実行するクアッドコア、4 GB の RAM、およびソリッドステート ドライブです。
これは、このようなクエリを実行するのにかかる時間についてですか、それとも何か間違っていますか? データを返すより効率的な方法はありますか?