Вы можете справиться с этим двумя таблицами - одна для текущей истории чата и одна архивная таблица. В конце периода (недели, месяца или дня в зависимости от вашего трафика) вы можете архивировать текущие сообщения чата, удалять их из небольшого стола и добавлять их в архив.
Таким образом, ваше приложение будет хорошо обрабатывать самый распространенный случай - запросить текущее состояние чата, и это будет очень быстро.
Для запросов типа "что сказал x в прошлом месяце" вы будете запрашивать таблицу архива, и это займет немного больше времени, но это нормально, поскольку таких запросов будет не так много, и если кто-то выполнит поиск вот так он будет готов подождать еще пару секунд.
В зависимости от ваших вариантов использования вы можете расширить этот принцип - если в течение последних 6 месяцев будет много запросов к сообщениям чата - сохраняйте их также в отдельной таблице.
Аналогичный принцип (для совершенно другой области) используется сборщиком мусора .NET, который имеет различное хранилище для недолговечных объектов, долгоживущих объектов, крупных объектов и т. Д.