我注意到 Postgres (8.3) 中的简单聚合性能存在一些问题。问题是,如果我有一个由 (customer_id,order_id) 唯一的表(比如 200M 行),那么查询select customer_id,max(order_id) from larger_table group by customer_id
比执行以下操作的简单 Java/JDBC 程序慢一个数量级以上:
1) 初始化一个空的 HashMap customerMap(这将映射 id -> 最大订单大小) 2) 执行“select customer_id,order_id from large_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)));
这种性能差异是预期的吗?我不应该这么想,因为我想上面的内容非常接近内部发生的事情。是否有证据表明数据库存在错误/错误调整?