volkszaehler.org を使用して、100 万行以上のテーブルからデータを取得する必要があります。以下は、ORM が作成するものです。
CREATE TABLE `data` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`channel_id` int(11) DEFAULT NULL,
`timestamp` bigint(20) NOT NULL,
`value` double NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ts_uniq` (`channel_id`,`timestamp`),
KEY `IDX_ADF3F36372F5A1AA` (`channel_id`)
)
現在、特に Raspberry Pi のような低パフォーマンスのプラットフォームで実行すると、グループ化されたデータの選択が遅くなります。
SELECT MAX(timestamp) AS timestamp, SUM(value) AS value, COUNT(timestamp) AS count
FROM data WHERE channel_id = 4 AND timestamp >= 1356994800000 AND timestamp <= 1375009341000
GROUP BY YEAR(FROM_UNIXTIME(timestamp/1000)), DAYOFYEAR(FROM_UNIXTIME(timestamp/1000));
説明:
SIMPLE data ref ts_uniq,IDX_ADF3F36372F5A1AA ts_uniq 5 const 2066 Using where; Using temporary; Using filesort
クエリは 50,000 レコードを処理する必要があり、Core i5 では 1.5 秒、RasPi ではすでに 6 秒かかります。
データ量の削減以外にパフォーマンスを改善する方法はありますか?