【发布时间】:2020-07-26 05:33:29
【问题描述】:
SELECT timeseries_id, "timestamp" FROM enhydris_timeseriesrecord WHERE timeseries_id=6661 ORDER BY "timestamp" DESC LIMIT 1;
(表包含大约66m条记录,timeseries_id=6661的大约0.5m。)
这个查询运行大约需要 1-2 秒,我觉得这太多了。
如果它使用简单的 btree 索引,它应该在大约 30 次迭代后找到它正在寻找的内容。据我所见,当我为该查询执行EXPLAIN ANALYZE 时,它确实使用了索引,但它必须在每个块中这样做,并且显然有 1374 个块。
如何让查询变得更快?
Table "public.enhydris_timeseriesrecord"
Column | Type | Collation | Nullable | Default
---------------+--------------------------+-----------+----------+---------
timeseries_id | integer | | not null |
timestamp | timestamp with time zone | | not null |
value | double precision | | |
flags | character varying(237) | | not null |
Indexes:
"enhydris_timeseriesrecord_pk" PRIMARY KEY, btree (timeseries_id, "timestamp")
"enhydris_timeseriesrecord_timeseries_id_idx" btree (timeseries_id)
"enhydris_timeseriesrecord_timestamp_idx" btree ("timestamp" DESC)
"enhydris_timeseriesrecord_timestamp_timeseries_id_idx" btree ("timestamp", timeseries_id)
Foreign-key constraints:
"enhydris_timeseriesrecord_timeseries_fk" FOREIGN KEY (timeseries_id) REFERENCES enhydris_timeseries(id) DEFERRABLE INITIALLY DEFERRED
Triggers:
ts_insert_blocker BEFORE INSERT ON enhydris_timeseriesrecord FOR EACH ROW EXECUTE PROCEDURE _timescaledb_internal.insert_blocker()
Number of child tables: 1374 (Use \d+ to list them.)
更新:EXPLAIN plan
【问题讨论】:
-
你能发布你的解释计划吗?
-
@BlagojAtanasovski 添加在问题的末尾。
标签: timescaledb