Могу поспорить, что нет ни одного клиента вашего приложения, которому нужно 1.8M строк одновременно. Вам следует подумать о разумном способе разбить результаты на более мелкие части и дать пользователям возможность перебирать их.
Это то, что делает Google. Когда вы выполняете поиск, могут быть миллионы просмотров, но они возвращают по 25 страниц за раз, полагая, что на первой странице вы найдете то, что вам нужно.
Если это не клиент, и результаты каким-то образом обрабатываются, я бы порекомендовал базе данных обойти все эти строки и просто вернуть результат. Нет смысла возвращать 1,8M строк только для вычисления на среднем уровне.
Если ни один из них не подходит, у вас есть реальная проблема. Время переосмыслить это.
После прочтения более поздних ответов мне кажется, что это скорее решение для составления отчетов, которое следует анализировать в пакетном режиме или рассчитывать в реальном времени и хранить в таблицах, которые не являются частью вашей транзакционной системы. Нет никакого способа, чтобы перенести 1,8M строк на средний уровень для вычисления скользящих средних можно масштабировать.
Я бы порекомендовал переориентировать себя - начните думать об этом как о решении для отчетности.