web-dev-qa-db-ja.com

グループ化と最大クエリの高速化

私のIoTユースケースでは、センサーの読み取り値を格納するテーブルがあります。 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);
1
x64

(ここでタイムスケールの共同創設者)

「ラストポイント」クエリを実行しようとしているようです。たとえば、各(デバイス、センサー)から送信された最新のレコードを検索します。上記のクエリの課題は、データベースが最後のデバイス/センサーをいつ見つけたかわからないため、時間の開始までスキャンして、新しいデバイスがないと結論付ける必要があることです。

時系列レコードに対してデバイスのリストからLATERALSCANを実行する、次のアプローチの方がはるかに優れています。

https://docs.timescale.com/latest/using-timescaledb/reading-data#last-point

幸運を祈ります。Slackグループは https://slack.timescale.com これらのタイプの質問に役立ちます。

2
Mike Freedman