Postgresql

加快 group by 和 max 查詢

  • January 13, 2019

在我的物聯網案例中,我有一個儲存感測器讀數的表。我正在使用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 小組對這些類型的問題很有用。

引用自:https://dba.stackexchange.com/questions/221173