-4

表有两列(的transaction_id,USER_ID),都与索引。表中约10M记录。优化Postgres的前N个查询

TRANSACTION_ID是唯一

TRANSACTION_ID上USER_ID指望从很少到数千变化。

我需要的是找到最大(TRANSACTION_ID),相对于该TOP25(ORDER BY DESC)TRANSACTION_ID对给定的用户必须被忽略。

例如,用21层TRANSACTION_ID的一个USER_ID不会被选中。 47个交易为user_id将返回交易26

我以抵消,限制等尝试了多种方法,但他们似乎都慢(成本非常高)。

+3

'我尝试了好几种ways' ......请发表您的疑问,让我们不要浪费时间重做什么可能已经你失败了。另外,样本数据会很好。如果能够向我们显示有意义的数据,可以用数字“3”代替'25'。 –

+1

请仔细阅读[PostgreSQL的性能(http://stackoverflow.com/tags/postgresql-performance/info),则** [编辑] **你的问题,并提供缺少的信息。 ? –

+0

您想订购'transaction_id',通过'user_id',则忽略所有的结果进行分组,但第26行对每个'user_id' - 你能指望加快.. –

回答

0

你有一个窗口的功能,即

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

应该有充足