Нужно выбирать оптимальную стратегию. Функции выбора случайных строк в SQL нет, поэтому я генерирую вспомогательную таблицу со случайными числами. В таблице 2 колонки: 1 колонка id строки, 2 колонка - случайное число. В результате сортировки этой рандомной таблицы по 2 колонке, в первой колонке у тебя будут случайные строки из основной таблицы. Можешь генерировать рандомную таблицу перед каждым запросом, либо, если записей очень много, генерировать ее один раз и при каждом запросе, пробегать по ней и запоминать позицию, где остановился. При следующем запросе, пробегать ее уже с того места. Когда дошел до конца - перегенерировать и начать заново. Предыдущие ответы могут не подойти, если у тебя ID идут не по порядку. К тому же, функция генерации рандомного числа, может часто возвращать уже сгенерированные числа. А в моем методе, пока ты не выведешь все записи, они не будут повторяться.