TimescaleDB:超级表上的SELECT COUNT(*)慢



我有一个使用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/)这会立即产生结果。

最新更新