我有一个使用 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
Run Code Online (Sandbox Code Playgroud)
根据 Python 脚本测量,在强大的服务器上获取包含 14,000 行的超表的计数需要 7 秒。而对于普通表,查询时间似乎不到 10 毫秒。这使得COUNT(*)on hypertable 在大多数情况下无法使用。
TimescaleDB 架构中是否存在某些因素导致COUNT(*)速度特别慢?
如果我的设置有问题,任何指示或猜测可能是什么或如何进一步诊断
如果由于架构原因 count() 会变得非常慢,那么有什么建议来解决这个问题 - 或者应该完全避免?
小智 8
您可以尝试 approximate_row_count() 函数(https://docs.timescale.com/api/latest/analytics/approximate_row_count/),它会立即给出结果。
| 归档时间: |
|
| 查看次数: |
2425 次 |
| 最近记录: |