Mysql
 sql >> Base de données >  >> RDS >> Mysql

mysql order by rand() problème de performance et solution

Tout d'abord, tous génèrent une valeur aléatoire de 1 à MAX(id), et non 100000000.

Ensuite, il existe au moins deux bonnes solutions :

  1. Utilisez > pas =

    SELECT items FROM tablea where status='0' and id>'$id23' LIMIT 1
    

    Créer un index sur (status,id,items) pour en faire une requête d'index uniquement.

  2. Utilisez = , mais réessayez simplement avec une valeur aléatoire différente si vous ne trouvez pas de réponse. Parfois, il faudra plusieurs essais, mais souvent il ne faudra qu'un seul essai. Le = devrait être plus rapide car il peut utiliser la clé primaire. Et s'il est plus rapide et réussit en un seul essai 90% du temps, cela pourrait compenser les 10% restants du temps où il faut plus d'un essai. Cela dépend du nombre d'écarts que vous avez dans vos valeurs d'identifiant.