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

mysql order by rand() problema e solução de desempenho


Primeiro, todos geram um valor aleatório de 1 a MAX(id), não 100000000.

Então, existem pelo menos algumas boas soluções:

  1. Usar > não =
    SELECT items FROM tablea where status='0' and id>'$id23' LIMIT 1
    

    Crie um índice em (status,id,items) para tornar esta uma consulta somente de índice.

  2. Usar = , mas tente novamente com um valor aleatório diferente se não encontrar um resultado. Às vezes, levará várias tentativas, mas muitas vezes levará apenas uma tentativa. O = deve ser mais rápido, pois pode usar a chave primária. E se for mais rápido e conseguir em uma tentativa 90% do tempo, isso pode compensar os outros 10% do tempo em que leva mais de uma tentativa. Depende de quantas lacunas você tem em seus valores de id.