带有 timescaledb 索引的 Postgresql Max 的大 O 表示法

Big O notation of Postgresql Max with timescaledb index

我正在编写一些脚本,这些脚本需要确定可以中断的时间序列数据流的最后一个时间戳。

我目前正在研究最有效的方法,最简单的方法是使用 MAX 寻找最大的时间戳。由于所讨论的表是 timescaledb 超表,因此它们已被索引,因此理论上应该是按照索引找到最大表的情况,这应该是非常有效的操作。但是,我不确定这是否真的是真的,并且想知道是否有人知道如果它正在处理索引,它的最大比例是多少,我知道它通常是一个 O(n) 函数。

如果列上有索引,max可以使用索引,会变成O(1):

EXPLAIN (COSTS OFF) SELECT max(attrelid) FROM pg_attribute;

                                          QUERY PLAN                                          
══════════════════════════════════════════════════════════════════════════════════════════════
 Result
   InitPlan 1 (returns [=10=])
     ->  Limit
           ->  Index Only Scan Backward using pg_attribute_relid_attnum_index on pg_attribute
                 Index Cond: (attrelid IS NOT NULL)
(5 rows)