2016-07-06 83 views
1

我有一個操作,它給了我一個與這些ID相關的ID和一些分數的列表。 然後我需要查詢數據庫並使用上面的數據對行進行排序。使用先前計算的數據對Postgresql表進行排序

我想是這樣的(我使用PostgreSQL):

SELECT * FROM sometable 
LEFT OUTER JOIN (VALUES (629, 3), (624, 1)) /* Here is my data */ 
AS x(id, ordering) 
USING (id) 
WHERE some_column_id=1 
ORDER BY x.ordering; 

但對於〜10000行,大概15秒我的機器上。 有沒有更好的方法來使用先前計算的數據對我的表進行排序?

+0

ORDER BY中的大小寫表達式? – jarlh

+0

@jarlh對於CASE表達式中的〜1000個子句可以嗎? – coldmind

+0

如果那麼多,請考慮幫助表! – jarlh

回答

1

該版本的性能如何?

SELECT st.* 
FROM sometable st 
WHERE st.some_column_id = 1 
ORDER BY (CASE WHEN st.id = 629 then 3 WHEN st.id = 624 THEN 1 END); 

sometable(some_column_id)上的索引也可能加快查詢速度。

但是,我不明白爲什麼您的10,000行的表上的版本將需要15秒。

+0

嗯,我試過我的和你的解決方案在另一個數據庫上有更多的行,而且這個工作很快,看起來像是我的本地數據庫的問題......(已經有'some_column_id'上的索引)。 – coldmind

+0

如果約有1000個案件,它會執行緩慢嗎? – coldmind

+0

@coldmind。 。 。這可能會大大減緩。你應該使用帶有索引的(temp)表。 –

相關問題