带有 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)
我正在编写一些脚本,这些脚本需要确定可以中断的时间序列数据流的最后一个时间戳。
我目前正在研究最有效的方法,最简单的方法是使用 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)