Я только что запустил простую SELECT * FROM table ORDER BY RAND() LIMIT 50;
для таблицы с 229 291 строкой. Завершено за 0,63 секунды. Учитывая, что RAND () действительно медленный и должно быть лучшее решение.
Я знаю только о различных альтернативных способах выбора только одной случайной строки из большого набора данных, быстрее, чем при использовании ORDER BY RAND()
. что объясняется здесь: http://wanderr.com/jay/order-by-slow/2008/01/30/
Для нескольких случайных строк я в настоящее время не знаю лучшего решения. Если идентификаторы являются последующими, и между ними нет пропущенных идентификаторов, вы можете создать список случайных чисел в вашем собственном коде PHP, разделенный запятыми, а затем использовать запрос SELECT * FROM table WHERE id IN(5,3,1);
.
Вот рабочее решение, в другом вопросе переполнения стека:
Как я могу оптимизировать функцию ORDER BY RAND () в MySQL?
Сработало для меня, 50 строк в наборе (0,09 сек) для таблицы с 229 291 записями.