Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Retorna resultados aleatórios (ordem por rand())


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.