Mysql позволяет сортировать случайным образом
SELECT * FROM my_table ORDER BY RAND()
Проблема в том, что такая сортировка зачастую вовсе не нужна для всей выборки — хочется просто достать случайный элемент из определённого множества, к тому же ORDER BY RAND() достаточно медленный выход из ситуации.
Можно попробовать делать выборку основываясь на числе элементов в целом и функции RAND():SELECT name FROM my_table JOIN (
SELECT CEIL(RAND() * (
SELECT MAX(id) FROM my_table
)) AS randomID
) AS random_table ON random_table.randomID=my_table.ID
На 50000 рядов такой запрос занимает 0.00086 сек.. Сравните с 1.56356 сек обычного варианта ORDER BY RAND().
Недавно натолкнулся на один интересный вариант:
select G.*, rand() as RO from GOODS G order by RO
Вероятно вас заинтересует случайная сортировка в Postgre, где рассматриваются и другие способы.