Вы не упомянули, какую базу данных вы используете, но я могу вспомнить пару возможных быстрых оптимизаций. Сколько гигабайт мы говорим?
1) Расчет max (отметка времени) может быть дорогим, учитывая большое количество строк. Вы, наверное, уже знаете, что это за значение, сохраните его в другой таблице, в файле конфигурации или в другом месте. Это, вероятно, будет вашей самой большой оптимизацией.
2) Добавьте еще один столбец, чтобы отметить последние обновления. Когда вы начнете обновление SET недавний = false, ГДЕ недавний = true, запишите все свои записи с последним = true. Вы можете ограничить размер вашего индекса, добавив к нему условие where
CREATE INDEX foo_index для "TB_TABLE" (недавний), ГДЕ недавний = true;
3) Убедитесь, что ваш сервер БД правильно оптимизирован. Убедитесь, что ваш ключевой и сортировочный буферы имеют соответствующий размер для вашего набора данных. Большинство баз данных с открытым исходным кодом предварительно настроены для рабочей станции разработчика, а не для рабочей нагрузки.
4) Пересмотрите свою схему. Вы уверены, что вам нужны все ваши записи? Вы записываете все данные, а не только данные, которые изменились? В этой ситуации я хорошо использовал две временные метки: одну временную метку для последней загрузки и одну временную метку для последнего изменения.