Есть подозрение, что нужно либо добавить индексы, либо проверить существующие, потому что выборки по индексированным полям должны выполняться очень быстро при таких размерах.
В остальном, Walt Disney дал правильные советы: разделить эту таблицу на две - архивную (в идеале - партицированную) и оперативную, в которой хранить данные за определенный период, джобами по истечении срока перекидывать эти данные в архив.
Можно еще дополнительно иметь "супер-оперативную" таблицу, в которой хранить необходимые вам уже агрегированные данные, которые обновлять триггерами после вставки информации в оперативную таблицу. Таким образом, после обновления оперативной таблицы, у вас уже будет вся аналитика за текущий период (день\неделю и т.д.).
Что касается аналитики по архиву, из моего опыта, заказчик всегда просит оперативные, быстро работающие отчеты, и агрегированные отчеты по месяцам\годам из архива, которые лишь бы построились. :-)