问题描述
我有一个使用 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 个连续的聚合视图 set up like here 和大约 15 列
运行以下查询很慢(使用 sqlAlchemy 生成的计数查询):
SELECT count(*) AS count_1
FROM (SELECT my_hypertable.timestamp AS my_hypertable_timestamp
FROM my_hypertable) AS anon_1
在强大的服务器上计算一个包含 14,000 行的超级表需要 7 秒,从 Python 脚本测量。而对于普通表,查询时间似乎不到 10 毫秒。这使得 hypertable 上的 COUNT(*)
在大多数情况下无法使用。
-
TimescaleDB 架构中是否存在使
COUNT(*)
特别慢的东西? -
如果我的设置有问题,任何提示或猜测可能是什么或如何进一步诊断
-
如果由于架构原因 count() 会超慢,有什么建议可以解决这个问题 - 还是应该完全避免?
解决方法
您可以尝试提供立即结果的近似行计数() 函数 (https://docs.timescale.com/api/latest/analytics/approximate_row_count/)。