В такой ситуации я мог бы посмотреть, есть ли способ создать список идентификаторов продуктов (я предполагаю, что у каждого продукта есть какой-то уникальный идентификатор) и перемешать его. Список может быть сохранен как временная таблица базы данных, или он может быть сохранен как переменная сеанса в вашем веб-приложении, например ... таким образом, вы можете получить доступ к любой части случайно упорядоченного списка без необходимости повторного вычисления всего объекта. с самого начала.
Это, очевидно, лучше, если у вас есть несколько человек, заходящих на сайт в любой момент времени, но вы ожидаете, что каждый из них просмотрит несколько страниц результатов.