使用volkszaehler.org我需要從一百萬+行表中檢索數據,下面是什麼ORM創建:MySQL優化GROUP BY索引性能?
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`)
)
現在,選擇分組數據是緩慢的,尤其是當像樹莓派低性能平臺上運行:
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
查詢需要通過50K的記錄,發生在酷睿i5 1.5秒,並且已經6S上RasPi 。
除了減少數據量之外,還有什麼可以提高性能嗎?
第二個想法我也不確定是否真的需要KEY'IDX_ADF3F36372F5A1AA'('channel_id'),因爲這應該已經被UNIQUE KEY覆蓋了? – andig