Что бы вы ни делали, не используйте ORDER BY RAND () в MySQL. Это не будет масштабироваться. Да, это будет работать нормально для небольшого числа строк, потому что набор данных небольшой. ORDER BY RAND () требует полного сканирования таблицы, что означает, что чем больше ваша таблица, тем дольше будет выполняться запрос. Это будет проявляться как «Ну и дела, сайт кажется медленнее» ... и медленнее ... и медленнее ...
Если у вас есть столбец id, который является целым числом и действует как первичный ключ, вы можете сгенерировать максимальное значение в PHP, прежде чем запрашивать его, будет намного быстрее, потому что вы на самом деле используете индекс.
Примером может быть что-то вроде:
$random_row_id = rand(1, $max);
а потом ...
SELECT * FROM foo WHERE id = $random_row_id
Вам нужно будет выяснить, как получить ваш максимальный $, но, скорее всего, вы можете просто получить идентификатор последней строки.
Одно предостережение: если вы удалили записи из таблицы, у вас будут «дыры», в которых вы можете попросить строку, которой больше не существует. В этом случае вы можете просто продолжать поиск, пока не найдете совпадение - оно все равно будет намного быстрее, чем полное сканирование таблицы.