我有一个使用TimescaleDB设置的用于交换蜡烛数据的超表。
-
TimescaleDB官方图像
timescale/timescaledb:latest-pg12
使用Docker设置并运行,具有确切的版本字符串starting PostgreSQL 12.6 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.2.1_pre1) 10.2.1 20201203, 64-bit
-
Python 3客户端
-
该表有5个连续的聚合视图,如这里和大约15列
运行以下查询很慢(使用SQLAlchemy生成的计数查询(:
SELECT count(*) AS count_1
FROM (SELECT my_hypertable.timestamp AS my_hypertable_timestamp
FROM my_hypertable) AS anon_1
在一个强大的服务器上,从Python脚本中计算一个14000行的超表需要7秒。而对于普通表,查询时间似乎在10ms以下。这使得超表上的COUNT(*)
在大多数情况下都不可用。
TimescaleDB体系结构中是否有什么东西使
COUNT(*)
特别慢?如果我的设置有问题,任何指针或猜测都可能是什么,或者如何诊断这个进一步的
如果由于体系结构的原因,count((将非常慢,那么有什么建议可以解决这个问题——或者应该完全避免它?
您可以尝试approxy_row_count((函数(https://docs.timescale.com/api/latest/analytics/approximate_row_count/)这会立即产生结果。