Я заметил некоторые проблемы с простой агрегированной производительностью в Postgres (8.3).Проблема в том, что если у меня есть таблица (скажем, 200M строк), которая уникальна по (customer_id, order_id), то запрос select customer_id,max(order_id) from larger_table group by customer_id
более чем на порядок медленнее, чем простая программа Java / JDBC, которая выполняет следующие действия:
1) Инициализировать пустую клиентскую карту HashMap (это будет 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)));
Ожидается ли эта разница в производительности?Я не должен думать, так как я представляю, что вышесказанное довольно близко к тому, что происходит внутри.Это доказательство того, что с базой данных что-то не так / неправильно настроено?