我一直在注意Postgres(8.3)中簡單聚合性能的一些問題。問題是,如果我有一個由(customer_id,order_id)唯一的表(比如200M行),那麼查詢select customer_id,max(order_id) from larger_table group by customer_id
比執行以下操作的簡單Java/JDBC程序慢一個數量級以上: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」的輸出,以便我們看看您是否缺少索引。 – 2012-02-15 05:17:13