【问题标题】:Does timescaledb index works the same as postgreSQL?timescaledb 索引是否与 postgreSQL 一样工作?
【发布时间】:2018-11-10 07:29:46
【问题描述】:

我正在为时间序列数据测试一个名为 Timescaledb 的 PostgreSQL 扩展。 如果我正确阅读了PostgreSQL的文档,例如查询

WHERE x = 'somestring' and timestamp between 't1' and 't2'

最适合索引(x,timestamp)。并在该 SQL 查询上运行 EXPLAIN 表明它有效。

当我在 Timescaledb 超表上尝试相同的查询时,它包含相同的数据并且没有索引 (x,timestamp)。性能大致相同(如果不是更好)。创建索引(x,timestamp)后,性能没有提升。

我了解超表具有内置时间戳索引。所以,我应该有一个不同的策略来向表中添加索引,例如只有(x) 的索引。对吗?

【问题讨论】:

    标签: performance indexing timescaledb


    【解决方案1】:

    关于 TimescaleDB 如何处理查询的一些事情:

    1. 基于时间的查询提高性能的主要方法是 通过块排除。数据按时间划分为块,因此 当执行特定时间范围的查询时, 规划器可以忽略具有超出该时间范围的数据的块。 然后将索引应用于正在搜索的块。

      如果您正在搜索包含所有块的时间范围,块 排除不适用,因此您的查询时间更接近 标准 PostgreSQL。

    2. 如果您的查询与块中的大量行匹配 被扫描时,查询规划器可以选择顺序扫描 而不是索引扫描来节省 I/O 操作 https://github.com/timescale/timescaledb/issues/317.

    3. 内置索引本身并没有什么特别之处,您可以在创建超表后删除索引,或者在运行create_hypertable 时将其关闭(参见timescale api docs)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      • 1970-01-01
      • 2021-05-20
      • 2021-06-14
      • 2019-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多