我一直在注意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