Не понимаю, должен признаться... Пусть есть таблицы
User и
Page, сохраняем для каждого пользователя список страниц, которые он уже видел. Сделаем таблицу
View с колонками:
- user - id пользователя,
- page - id страницы,
- time - время просмотра.
Чтобы просмотреть миллион страниц из расчёта секунда на страницу пользователю потребуется 1000000/3600 = 277.77 часов = 11.5 суток непрерывного просмотра = 34.7 суток просмотра из расчёта 8 часов в день, 7 дней в неделю. Не видел случаев, когда такое нужно, ну да ладно; вам виднее. Ну и пусть в этой таблице будут миллионы записей, и что? Вы можете использовать partitioning, - MySQL его поддерживает.
Что касается выборки очередной страницы для просмотра: зачем вам загружать это всё в память? Это делается средствами SQL (если выборка страницы действительно случайна).
И потом, вам действительно надо случайную выборку или можно показывать страницы просто по порядку? Без понимания предметной области это не понятно.