2016-07-06 10 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句にはOKでしょうか? – 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。 – coldmind

+0

。 。おそらくかなり遅くなるでしょう。インデックス付きの(temp)テーブルを使用してください。 –

関連する問題