私はPostgres(8.3)の単純な集計パフォーマンスにいくつかの問題があることに気づいています。問題は、(customer_id、order_id)によって一意のテーブル(200M行)がある場合、クエリselect customer_id,max(order_id) from larger_table group by customer_id
は、次のような単純なJava/JDBCプログラムよりも1桁以上遅いということです。postgres集計パフォーマンス
1)空のHashMapのcustomerMapを初期化する(id - > max order sizeをマップする) 2) "select customer_id、order_id from larger_table"を実行し、ストリーミング結果セットを取得する 3)行は次のようになります。
long id = resultSet.getLong("customer_id");
long order = resultSet.getLong("order_id");
if (!customerMap.containsKey(id))
customerMap.put(id,order);
else
customerMap.put(id,Math.max(order,customerMap.get(id)));
このパフォーマンスの違いはありますか?私は、私は上記が内部的に起こっていることにかなり近いと想像しているからではないと思うべきです。間違っている/間違ってDBに調整されているという証拠ですか?
あなたのステートメントに 'EXPLAIN ANALYZE'の出力を含めて、インデックスがないかどうかを確認してください。 –