Postgresql
加快 group by 和 max 查詢
在我的物聯網案例中,我有一個儲存感測器讀數的表。我正在使用timescaledb擴展。
我有以下表定義:
CREATE TABLE readings ( id BIGSERIAL PRIMARY KEY, time TIMESTAMPTZ NOT NULL, value DOUBLE PRECISION NOT NULL, device VARCHAR(255) NOT NULL, sensor VARCHAR(255) NOT NULL, resolution VARCHAR(255) NOT NULL, UNIQUE(time, device, sensor, resolution) );
我想要每對的最後報告時間。
(device,sensor)
這是我正在執行的查詢:select MAX(time), device, sensor from readings group by device, sensor
此查詢需要很長時間才能完成。有什麼方法可以提高性能嗎?或者任何更好的查詢來達到相同的結果?
我試過這樣做,但沒有幫助:
create index if not exists readings_idx on readings (time, device, sensor, resolution);
(此處為 Timescale 聯合創始人)
聽起來您正在嘗試執行“最後一點”查詢,例如,查找每個(設備、感測器)送出的最新記錄。上述查詢的挑戰在於數據庫不知道它何時找到最後一個設備/感測器,因此需要掃描回開始時間以得出周圍沒有新設備的結論。
更好的是以下方法,它根據時間序列記錄從設備列表中執行橫向掃描:
https://docs.timescale.com/latest/using-timescaledb/reading-data#last-point
祝你好運,您可能還會發現我們在https://slack.timescale.com上的 Slack 小組對這些類型的問題很有用。