Essa é uma dúvida que volta e meia aparece nos fóruns, como obter linhas aleatórias em uma query. Normalmente o que vemos é algo assim:
SELECT * FROM tabela ORDER BY rand();
Contudo, o que muitos não sabem é que uma query dessa forma causa um grande impacto na performance do SGBD.
A maneira correta para ordenar os resultados por um número aleatório é:
SELECT *, RAND() as rand FROM tabela ORDER BY rand;
Por quê? Bem, a resposta é realmente muito simples, ORDER BY RAND () faz com que a ordem seja recalculada a cada vez que é buscado uma nova linha pois cada linha RAND () retorna um valor diferente.
Quando usado na seleção o valor é calculado apenas uma vez por linha e os resultados só são ordenados.