【问题标题】:TimescaleDB: SELECT COUNT(*) slow on hypertableTimescaleDB:超表上的 SELECT COUNT(*) 慢
【发布时间】:2021-08-29 08:20:08
【问题描述】:

我有一个使用 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 毫秒。这使得超表上的COUNT(*) 在大多数情况下都无法使用。

  • TimescaleDB 架构中是否有什么东西让COUNT(*) 特别慢?

  • 如果我的设置有问题,请指点或猜测可能是什么或如何进一步诊断

  • 如果由于架构原因 count() 会非常慢,有什么建议可以解决这个问题 - 还是应该完全避免?

【问题讨论】:

标签: timescaledb


【解决方案1】:

您可以尝试使用approximate_row_count() 函数(https://docs.timescale.com/api/latest/analytics/approximate_row_count/),它会立即给出结果。

【讨论】:

  • 非常感谢 Benoit!正常的COUNT 速度慢有什么特别的原因,所以我可以更好地理解超表的限制吗?
猜你喜欢
  • 2020-05-18
  • 1970-01-01
  • 2014-01-19
  • 2015-01-15
  • 2011-09-25
  • 2023-03-15
  • 2015-07-31
  • 2012-10-13
  • 2012-02-17
相关资源
最近更新 更多