2017-11-09 14 views
0

私は数百万行のPostgresテーブルを持っています。列の1つはタイムスタンプで、xより大きくyよりも小さい時間で行を照会する必要があります。何十万行も戻っているので、インデックスを作成してもクエリには長い時間がかかります。Futuresで大きなJDBCクエリを高速化できますか?

私の計画は、Futuresのリストを使用して、それぞれ小さな時間間隔で同時にクエリを作成し、その後に結果を集計することです。

私は大きなスピードアップを望んでいますか?より良いアプローチがありますか?

+0

質問を編集して 'explain analyze'出力を追加してください –

+0

JDBCには非同期APIがないため、マルチスレッドが必要です。先物を使用して、それらのスレッドの結果を組み合わせることができます。しかし、並列化を行うことは、データベースによってサービスプロバイダーである必要があります。それを手作業で行うと、結果が速くならないかもしれません。代わりに集約文をDB内で使用してみてください。 – eckes

答えて

0

ボトルネック箇所によって異なります。それがネットワークI/O上にある場合、それは大幅に役に立たないでしょう。

ディスクI/Oの場合は、効果的にクエリを並列化するため、少し助けになるかもしれません。ただし、DBサーバーがI/Oの並列化のメリットが大きい場合にのみ、それはあなたが多くの利益を見ていない可能性がありますので、手作業で複数のクエリを同時にディスパッチしてテストし、コードを再加工する前に見てみましょう。

フォワードインデックススキャンを実行していることを確認してください(EXPLAIN ANALYZEを参照)。後方索引スキャンを実行していると、利益が少なくなります。

TL; DR:ベンチマークと参照。

関連する問題