Для подобных задач иногда подходит такая идея: разделить базу на части(пакеты), и запросы к ним делать независимо, и потом объединять результаты
Например — отдельно хранить данные за последние дни с воскресения по пакету на один день, раз в 7 дней объединяя всю базу в один пакет.
Если нужен поиск по ключу — обращаться к пакетам в порядке возрастания «возраста» базы.
Если нужны отсортированные данные — то после поиска нужно данные «слить» с перекрыванием более старых записей новыми.
Более умная стратегия — объединять пакеты по степенному закону. Те пакеты бывают только на 2^i дней.