O motivo pelo qual ordenar por
RAND()
pode ser lento é que você está forçando o banco de dados a classificar a tabela inteira antes de retornar qualquer coisa. Apenas reduzir a carga para uma única varredura de tabela é muito mais rápido (embora ainda um pouco lento). Isso significa que você pode obter parte do caminho apenas evitando a ordenação:
SELECT *
FROM my_table
WHERE RAND() < 0.1
ORDER BY RAND()
LIMIT 100
Isso selecionará aproximadamente 1% de todas as linhas da tabela, as classificará e retornará as 100 principais. Apenas observe que o principal problema aqui (assim como com a resposta do @cmd) é que você não pode ter certeza de que a consulta retorna nada mesmo.
A abordagem acima deve envolver uma varredura de tabela inteira (para decidir quais linhas usar) seguida por aproximadamente 1% das linhas. Se você tiver muitas linhas, poderá reduzir a porcentagem de acordo.