timescaledb index的工作原理与postgreSQL相同吗?

Max*_* Wu 4 indexing performance timescaledb

我正在测试名为Timescaledb的PostgreSQL扩展以获取时间序列数据.如果我正确阅读PostgreSQL的文档,例如查询

WHERE x = 'somestring' and timestamp between 't1' and 't2'
Run Code Online (Sandbox Code Playgroud)

最适合索引(x,timestamp).并运行EXPLAIN该SQL查询显示它的工作原理.

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

据我所知,超文本具有内置时间戳索引.所以,我应该有一个不同的策略来为表添加索引,例如使用just的索引(x).是对的吗?

小智 6

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

  1. 基于时间的查询提高性能的主要方式是通过块排除.数据按时间划分为块,以便在执行特定时间范围的查询时,计划程序可以忽略具有该时间范围之外的数据的块.然后为正在搜索的块应用索引.

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

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

  3. 内置索引没有任何内在的特殊之处,您可以在创建高压后删除索引,也可以在运行时将其关闭create_hypertable(请参阅timescale api docs).