【问题标题】:Is this index pertinent with TimescaleDB?这个索引是否与 TimescaleDB 相关?
【发布时间】:2021-04-01 01:11:24
【问题描述】:

我有一个关于 timescaleDB 索引的问题

我们有一个包含以下列的表格:

timestamp id value ...

其中 id 表示测量值。例如:特定位置的室温

目前我们有 2 个索引 (id, timestamp DESC) 和默认的 (timestamp DESC)

我们基本上有两种查询:

  1. SELECT * FROM table WHERE id = 'aaa' AND timestamp BETWEEN <date1> AND <date2>
  2. SELECT * FROM table WHERE id in ('aaa', 'bbb', 'ccc', ...) AND timestamp BETWEEN <date1> AND <date2>

看来索引 1 对查询 1 来说非常好。

对于查询 2,id 的数量可以达到近 200。在这种情况下,是否可以在 (timestamp DESC, id) 上添加索引?

也许删除默认的(timestamp DESC)

【问题讨论】:

    标签: postgresql-11 timescaledb


    【解决方案1】:

    对于第一个查询,(id, timestamp DESC) 上的现有索引应该优于 (timestamp DESC, id),因为第一个查询预计会先选择 id,然后再选择 timestamp。如果只有少数行满足timestamp 上的查询条件,即timestamp BETWEEN <date1> AND <date2>,则相反的索引可能会更好。

    我强烈建议对您的查询运行 EXPLAIN ANALYZE 并了解查询计划中如何使用现有索引。

    如果您在(id, timestamp DESC) 上保留索引,那么将默认索引保留在(timestamp DESC) 上可能是个好主意。

    Timescale 写了一个blogpost about using composite indexes,你可能想检查一下。

    【讨论】:

      猜你喜欢
      • 2018-11-10
      • 2021-06-14
      • 2019-07-23
      • 2021-01-21
      • 1970-01-01
      • 2013-04-24
      • 2014-04-02
      • 2021-10-29
      • 2016-04-28
      相关资源
      最近更新 更多