我的表:尋找最高溫度爲某一天在SQL
hourly_weather electrical_readings
---------------- -----------------------
meter | time_read | temp meter | time | kwh
---------------- -----------------------
1 1316044800 55 1 1316136250 19.24
1 1316138400 56 1 1316044320 18.29
(...) (...)
我想從這個數據中檢索兩個重要參數:
1)我想對於一個給定
一天總KW2),我想這一天
我使用的查詢最高溫度需要WAYYYY太長時間運行,但我想不出另一種方式來做到這一點。就像兩個表格中的100,000行數據一樣。
SELECT * FROM (
SELECT * , SUM(kwh) AS sumkwh,
DATE(FROM_UNIXTIME(r.time_read)) AS datex,
UNIX_TIMESTAMP(DATE(FROM_UNIXTIME(r.time_read))) AS datey,
(
SELECT MAX(temp)
FROM hourly_weather hw
WHERE hw.meter = 1
AND time_read >= datey
AND time_read < datey + 86400
) AS temp
FROM electrical_readings r
WHERE id = 1
GROUP BY datex
) as t1
WHERE t1.temp != '';
嘗試運行沒有外部查詢選擇;速度增益是多少?在我看來,它已經會提高你的表現。另一種解決方案可能是在那天后的cron期間存儲這兩天重要的值。那些價值不會改變(或者他們會)? – Luceos
刪除外部選擇對查詢運行時幾乎沒有影響。 –
如果我刪除子查詢中的AND time_read> = datey子句,它將刪除99%的運行時間。 –