索引会加快查找最大 TIMESTAMPTZ 的速度吗?

Eva*_*bbs 1 sql postgresql query-optimization database-indexes postgresql-9.6

我有一个conversation_views包含列的表:user_id | conversation_id | viewed_at

还有一个INDEX on conversation_views (conversation_id, user_id)

我想查询:

select
  max(viewed_at)
from conversation_views
where
  conversation_id=%L
  and user_id=%L
Run Code Online (Sandbox Code Playgroud)

通过此索引,该查询的性能是否良好,或者我可以使用其他策略吗?我正在使用 Postgres 9.6.12。

jja*_*nes 5

该查询的更好索引可能是:

CREATE INDEX on conversation_views (conversation_id, user_id, viewed_at)
Run Code Online (Sandbox Code Playgroud)

这样,它可以将索引下降到给定conversation_id和user_id出现最大viewed_at的位置,并直接读取它(如果该位置有需要忽略的不可见元组,可能会扫描一下)。

这比您现有的索引好多少取决于组合的选择性(conversation_id, user_id)。如果每个组合只有几行,则差异会很小。如果有几万的话,差别可能会很大。

但要回答您的标题问题,对于最现实的情况,您当前的索引应该已经比没有索引要好得多。