时间刻度对于简单查询,压缩表将永远占用时间



我有一个大约有4000万行的超表。我们希望压缩它,以减少一些存储成本。在压缩之前,下面的查询运行得非常快。

select * from trades where pair = 'xxxxxxxxx';

压缩后,这个查询挂起很长时间(30-40+s)

查看查询计划,它似乎解压每个单独的块,然后检查pair是否存在,如果不存在,然后移动到下一个块。虽然应该检查数据对是否存在,并且只在存在时才解压缩数据块。

我有segementby设置成对,所以我不完全确定我错过了什么。

CREATE TABLE trades (
"timestamp" timestamptz NOT NULL,
tx varchar(255) NOT NULL,
pair varchar(255) NOT NULL,
price float8 NOT NULL,
amount float8 NOT NULL
);
CREATE INDEX trades_pair_timestamp_idx ON public.trades USING btree (pair, "timestamp" DESC);
SELECT create_hypertable('trades', 'timestamp');
alter table trades set (
timescaledb.compress, 
timescaledb.compress_segmentby = 'pair',
timescaledb.compress_orderby = 'timestamp');
SELECT add_compression_policy('trades', INTERVAL '1 week');

您运行的是什么版本的Timescaledb ?有一个与varchar字段在解压缩之前未被过滤相关的错误,该错误已在2.3.1

中修复。

最新更新