假设我有一个records
具有以下结构的表
- id(唯一整数)
- 更新(时间戳)
我有一个input_array
with values [[id_1, timestamp_1], [id_4, timestamp_4], ...]
。我将每个元素称为tuple_1
,tuple_4
等。
我正在寻找最有效的查询(在 PostgreSQL v11.2+ 中)来选择[id_1, id_4, ...]
from records
,但仅限于 where tuple_{n}.updated > row{n}.updated
。假设input_array
可能包含数千个元组,以及records
超过一百万行。
我什至不知道从哪里开始。Lateral join
想到了unnest
,和where in
,但是到目前为止我尝试过的一切都失败了
更新我愿意以input_array
任何格式(元组,两个单独的数组,等等),并updated
成为int
如果您不固定在数组输入上,则可以使用元组比较。
这可以利用常规的 btree 索引
(id, updated)
请注意,这
=
用于两个值,并且等效于但是您想使用 比较时间戳
>
。如果你加入一个values
子句,你可以这样做:在线示例:https ://rextester.com/GGC83046