优化Postgres TOP-n查询

时间:2017-01-16 09:01:10

标签: sql postgresql greatest-n-per-group postgresql-performance

包含两列(transaction_id,user_id)的表,两者都带有索引。表中约有10M条记录。

transaction_id是唯一的

user_id上的transaction_id计数从极少数到数千不等。

我需要找到max(transaction_id),关于必须忽略给定用户的top25(desc命令)transaction_id。

例如,将不会选择具有21个transaction_id的user_id。具有47个事务的user_id将返回事务26。

我通过使用偏移,限制等尝试了几种方法,但它们似乎都很慢(成本非常高)。

1 个答案:

答案 0 :(得分:0)

你有一个窗口功能,即

select user_id, nth_value(transaction_id, 26) over (
  partition by user_id order by transaction_id
)
from your_table;

应该充足