我注意到Postgres(8.3)中简单聚合性能存在一些问题。问题在于,如果我有一个表(例如200M行),它是按(customer_id,order_id)唯一的,那么查询
1)初始化一个空HashMap customerMap(这将映射id->最大订单大小) 2)执行“ select customer_id,order_id from larger_table”,并获取流式结果集 3)迭代结果集,在每一行上执行以下操作:
这种性能差异是否是预期的?我认为不应该,因为我想上述情况与内部发生的情况非常接近。这是否表明数据库存在某些错误/调整不正确的问题?
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 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)));
这种性能差异是否是预期的?我认为不应该,因为我想上述情况与内部发生的情况非常接近。这是否表明数据库存在某些错误/调整不正确的问题?
EXPLAIN ANALYZE
的输出,这样我们可以看出您是否缺少索引。 - Daniel Lyons