【问题标题】:Big O notation of Postgresql Max with timescaledb index带有 timescaledb 索引的 Postgresql Max 的大 O 表示法
【发布时间】:2022-01-18 12:53:39
【问题描述】:
我正在编写一些脚本,这些脚本需要确定可以中断的时间序列数据流的最后一个时间戳。
我目前正在研究最有效的方法,最简单的方法是使用 MAX 查找最大的时间戳。由于有问题的表是 timescaledb 超表,它们被索引,所以理论上应该是按照索引找到最大的,这应该是非常有效的操作。但是,我不确定这是否真的是真的,并且想知道是否有人知道如果 max 在索引下工作时如何缩放,我知道它通常是 O(n) 函数。
【问题讨论】:
标签:
postgresql
max
timescaledb
【解决方案1】:
如果列上有索引,max可以使用索引,会变成O(1):
EXPLAIN (COSTS OFF) SELECT max(attrelid) FROM pg_attribute;
QUERY PLAN
══════════════════════════════════════════════════════════════════════════════════════════════
Result
InitPlan 1 (returns $0)
-> Limit
-> Index Only Scan Backward using pg_attribute_relid_attnum_index on pg_attribute
Index Cond: (attrelid IS NOT NULL)
(5 rows)