Ne pas utiliser RAND() pour les recherches aléatroires

F O R U M S (milbako.com) F O R U M S (milbako.com) Base de données Mysql Ne pas utiliser RAND() pour les recherches aléatroires

  • Ce sujet contient 0 réponse, 1 participant et a été mis à jour pour la dernière fois par lotfi, le il y a 1 mois.
  • Créateur
    Sujet
  • #16088
    lotfi
    Maître des clés
    • 32
    Up
    0
    Down

    C’est l’une de ces astuces qui sonnent cool au début, et de nombreux programmeurs débutants tombent dans ce piège. Vous ne réalisez peut-être pas quel type de terrible goulot d’étranglement vous pouvez créer une fois que vous commencez à l’utiliser dans vos requêtes.

    Si vous avez vraiment besoin de lignes aléatoires de vos résultats, il existe de bien meilleures façons de le faire. Certes, il faut du code supplémentaire, mais vous éviterez un goulot d’étranglement qui s’aggrave de manière exponentielle à mesure que vos données augmentent. Le problème est que MySQL devra effectuer l’opération RAND() (qui prend de la puissance de traitement) pour chaque ligne de la table avant de la trier et de vous donner seulement 1 ligne.

    // ce qu'il ne faut pas faire:
    $r = mysql_query("SELECT username FROM user ORDER BY RAND() LIMIT 1");
     
     // beaucoup mieux:
     
    $r = mysql_query("SELECT count(*) FROM user");
    $d = mysql_fetch_row($r);
    $rand = mt_rand(0,$d[0] - 1);
     
    $r = mysql_query("SELECT username FROM user LIMIT $rand, 1");

    Vous choisissez donc un nombre aléatoire inférieur au nombre de résultats et vous l’utilisez comme décalage dans votre clause LIMIT.

    see You soon
    www.milbako.com
    e-mail : Webmaster

  • Vous devez être connecté pour répondre à ce sujet.
Translate »