TimescaleDB:SELECT COUNT(*) 在超表上速度慢
TimescaleDB: SELECT COUNT(*) slow on hypertable
我有一个 hyper table 用于使用 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 个客户
table 有 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
根据 Python 脚本测量,在功能强大的服务器上计算 14,000 行的 hypertable 需要 7 秒。而对于正常的 table 查询时间似乎不到 10 毫秒。这使得 hypertable 上的 COUNT(*)
在大多数情况下无法使用。
TimescaleDB 架构中有什么东西让
COUNT(*)
特别慢吗?如果我的设置有问题,任何指示或猜测可能是什么或如何进一步诊断
如果 count() 由于体系结构原因变得非常慢,有什么解决此问题的建议 - 还是应该完全避免?
您可以尝试 approximate_row_count() 函数 (https://docs.timescale.com/api/latest/analytics/approximate_row_count/),它会立即给出结果。