Конечно, вы должны сделать это на стороне MySQL
.
Но учтите, что ORDER BY RAND()
очень неэффективно в MySQL
, поскольку требует filesort
.
Узнайте, как эффективно выбрать 10
случайные строки при сканировании одной таблицы:
SELECT *
FROM (
SELECT @cnt := COUNT(*) + 1,
@lim := 10
FROM t_random
) vars
STRAIGHT_JOIN
(
SELECT r.*,
@lim := @lim - 1
FROM t_random r
WHERE (@cnt := @cnt - 1)
AND RAND() < @lim / @cnt
) i
См. Эту статью в моем блоге для деталей производительности:
Для таблицы записей 1,000,000
она выполняется менее чем за секунду вместо 15
секунд с использованием ORDER BY RAND()
.