2017-01-16 110 views
-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; 

應該有充足