Какие существуют способы оптимизации подсчета суммы на больших данных?
индексы  и колоночная база
В общем случае не существует: вы, исходя из формулировки вопроса, хотите получать доступ к произвольным записям и суммировать произвольные колонки.

Если несколько уменьшить степень гибкости, можно преагрегировать данные для последующей аналитики (можно сказать, создать ряд materialized view). Чтобы было понятнее, пусть имеется сырая таблица продаж (я намеренно делаю ее денормализованной, в реальности это может быть несколько таблиц, которые соединяются в запросе):

sales
------------------
datetime
client_first_name
client_last_name
client_email
client_region
client_city
client_age
client_gender
product_name
product_category
product_type
product_manufacturer
product_price
quantity
shop_id
shop_region
shop_city
seller_first_name
seller_last_name
seller_department
...

Вероятно, вы не будете на регулярной основе строить отчеты по этой таблице с произвольными фильтрами и группировками. Например, вы хотите видеть данные в разрезе региона/пола/возраста покупателя, категории/типа продукта, магазина. Тогда можно сделать преагрегированную таблицу, где будет группировка по нужным полям:
SELECT client_region, client_gender, client_age, product_category, product_type, shop_id, SUM(quantity), SUM(product_price*quantity)
  FROM sales
 GROUP BY client_region, client_gender, client_age, product_category, product_type, shop_id

Также, если вы не собираетесь фильтровать по времени с точностью до секунды, а делаете отчеты максимум по дням, по полю datetime также можно сделать группировку (GROUP BY date_trunc('day', datetime)).

Чтобы не плодить кучу таблиц, можно организовать такое хранилище (обычно его называют Data warehouse) по схеме звезды.